switch to a stateful conversation protocol with separate try next/reduce range and retry hash commands to improve efficiency and so that we can differentiate between moving on and cutting down the range and trying again
refactor sync_to into a worker class, in preparation for sync_algorithm invoking commands to send
sync_algorithm now invokes the commands on the worker classes, in preparation for one of them taking extra arguments