redo -- blocking requests

redo_block aims to add the same cmd/1-3 functionality redo allows, but
while disabling pipelining.

The reason for this is that in some cases, it becomes difficult to
measure the time a request takes and to allow individual timeouts from
request/response when everything gets to be sequential.

redo_block instead buffers the requests locally on a gen_server that
starts timers ASAP and will make sure only one request at a time is sent
over a connection. This is much slower than pipelining, but allows a
more granular control over failures.