Context from this in a PR discussion: #26 (comment)
The way to fix this is to use .writable() and store the future to for polling, similar to how we do it in quinn.
However, in this case it's a little more complicated, since we've also got a lock around our socket, and might have to replace the socket when it errors out and needs to be rebound, so we should also store multiple wakers for each task that tried to send on a currently-being-replaced socket.