Runnable (that can be submitted to thread pool) that waits for when it's time
to issue replica calls, finds region replicas, groups the requests by replica and
issues the calls (on separate threads, via sendMultiAction).
This is done on a separate thread because we don't want to wait on user thread for
our asynchronous call, and usually we have to wait before making replica calls.