Made predicate to gadget mapping more robust.

Both move and add now attempt to use scratch registers if they are unable to
find gadgets that directly fulfil the requested operation.

They have also been extended to handle memory locations, which is a necessary
step in adding stack based location variables.