Extend u1db Synchronizer to allow deferred decryption during sync

I'm splitting the Synchronizer.sync method into the main function
and a second one, that performs the last step (last known gen/trans_id
for a given replica, and PUT with sync info to replica) in a deferred or
inline manner.

This change allows passing the last part of the sync as a callback
to be fired after the asynchronous decryption has finished.