A multiple-producer, single-consumer queue. Create one with New(),
and send from many gorotuines with Tx.Send(). Only one gorotuine may
call Rx.Recv().
Receive a message from the queue. Blocks if the queue is empty.
If the context ends before the receive happens, this returns
ctx.Err(). If Close is called on the corresponding Tx, this
returns io.EOF