better fit the _init -> _begin/_next loop

you call _init once when you start rebalance
then you loop:
 you call _begin (can return ITER_NO_MORE or an error)
 you call _next in a loop as many times as you want, you have to stop
  on an error or ITER_NO_MORE
 then you wait for all your queries to be replied, call _delete/_ignore as
 appropriate
 you loop back to _begin

_begin/_next might give you a random iteration order,
or it might simply continue where it left off, you shouldn't rely on the exact
implementation.

what matters is that a sequence of _next calls without a _begin
will not give you the same hash again.
When you get an ITER_NO_MORE from _next you can't know whether
all hashes have been processed or not (there might be some that need a retry).
So you have to call _begin again. Only when _begin tells you ITER_NO_MORE
you can know that all hashes were processed.

You *can* call _begin even if _next didn't give you ITER_NO_MORE yet,
and you probably won't see the same hashes again immediately.