When closing a connection (either due to an error or simply because the
user wanted to), we will now *take* `response_channels` as opposed to
clearing them. This ensures that `Peer::request` can't succeed in both
adding the oneshot channel in `response_channels` map _and_ submit the
message onto the `outgoing_tx` channel.
This also streamlines how we close a connection by unifying all the exit
code paths of the IO handling future.