Completion queues + flow control + single threading is hard.
We need a read outstanding on a call to grant flow control tokens to the
remote end.
To do that we need to request a read *before* we wait for the write to
be finished, otherwise, in the case of a large write we'll block waiting
for flow control tokens.
Built on #6402