Handle errors preparing for an incremental sync

Log the issue, but keep retrying with a delay.
Move continuous incremental sync and preparing retry into
helpers in sync.py.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
reduce default logging level for boto

Log messages about each new connection aren't very useful.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
client: don't escape copy source header

Requests takes care of this for us.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
worker: only wait for existing objects

Copy operations are long running and use a state log, but deletes do
not.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
client: fix url_safe for non-unicode

Actually use urllib.quote() in both cases.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
worker: use the full op_id when waiting

self.op_id is just the last part of it. Get it from the caller
instead.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
worker: treat 404 as an empty marker

If the log does not exist at all, since no operations have been completed
on that bucket, we get a 404.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
sync: handle modified (meta)data log api

It now returns the last marker in addition to the log entries, which
are now in a separate field.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>