Make changes to a copy of the options parameter

If the method alters the options hash, clients calling this method in a loop
will unwittingly be sending a different hash on the second and subsequent calls.

Alteration of the options hash is causing failure in the backup gem, in cases where there are more than 1000 objects to delete. See https://github.com/meskyanichi/backup/pull/510

About the test: as this is behaviour which is tested in the Mock version of the method, I have duplicated code between the Real and Mock versions.