Fix bug causing TestCloseSingleChannel to fail
Fix bug causing TestCloseSingleChannel to fail

There was a very subtle bug when a connection is closed right after a
successful call is received.
recvPeerFrame was blocked in select {recvCh, errCh}. When a connection
reads a frame, puts it into the recvCh, but then gets an EOF and puts
an EOF error in the errCh, the select will randomly choose a case.
There is no priority order.

In our case, we want a strict priority order when reading frames to
always choose recvCh if there's any frames, and process errors after.
Emulate a priority order by checking recvCh in the errCh case using
a non-blocking select (both on the writer and reader side).

uber/tchannel-go,uber/tchannel-go