The functionality you are looking for is currently not available through VI SDK.
The location parameter is restricted to the manged object reference of a folder. These folders are created at the top level of the hierarchy and maybe nested or they may be created under a datacenter.
The folders you are referring to are under a datastore to which you cannot get a managed object reference through vi sdk. You will note the same functionality using VI Client, if you try cloning a virtual machine. The location to choose from the inventory will comprise of choosing a datacenter, any folder under a datacenter, a datastore when selecting storage, selecting a resource pool.
Thus when you are using these methods, to the move the files from "[ds1] to "[ds2] , where ds1 and ds2 are datastores, as you have already noted.
Using the "CloneVM_Task" API, you would be creating the clone of the machine "vm1", but the files for this new VM would be created in the folder with the name provided for the new vm that would be ready after the cloning.