If we're keeping some bytes in the line buffer waiting for a
CR/LF, the SSLEngine may not have enough room to put a packet's
worth of data in.
Instead of managing a single buffer, keep a channel of them
and emit a complete buffer each read call.
To preserve the order of lines we offer them into a channel
without suspending. If we launch a new coroutine there's no
guarantee they'll execute in order, even if the method they
call is fair.