be lenient on transient http errors

this PR does a few things other than being lenient on transient http errors (anything from 300-499):

* adds a load of tests for the `sync_object` method
* makes sure that `SyncFailed` gets raised when there are http errors that are not severe (nothing 500 and above)
* sets the `found` variable to `False` as a default, only changing to `True` if `sync_object_intra_region()` works
* adds a test to ensure that we are not calling wait_for_object if the object was never found.

Test coverage got raised to 41%