fix(http2): Fix race condition in client dispatcher (#3041)
fix(http2): Fix race condition in client dispatcher (#3041)

There exists a race condition in ClientTask::poll() when the request
that is sent via h2::client::send_request() is pending open. A task will
be spawned to wait for send capacity on the sendstream. Because this
same stream is also stored in the pending member of
h2::client::SendRequest the next iteration of the poll() loop can call
poll_ready() and call wait_send() on the same stream passed into the
spawned task.

Fix this by always calling poll_ready() after send_request(). If this
call to poll_ready() returns Pending save the necessary context in
ClientTask and only spawn the task that will eventually resolve to the
response after poll_ready() returns Ok.

tshepang/hyper,hyperium/hyper,tshepang/hyper,tshepang/hyper,hyperium/hyper,hyperium/hyper