This I believe fixes problems with it. First off, is to call an
internal function to make sure to process any packets that are
pending despite there being no outstanding actions...
The second part is dealing w/ the issue that one channel may read
data for a previously processes channel... There isn't a good way
to get what channels have pending data, instead, use a custom wrapper
around recv, and if ANY data was read/returned, process all the pending
requests again. This will do a bit of extra work, but it a lot more
simple than fixing libssh2 to be sane...