refactor random 'test water' connection block to avoid holding RLock over q.updateRDY
don't hold RLock over q.ConnectionMaxInFlight
rename mutex var
account for no connections
conn: make public
reader/writer: consolidate into conn
reader: add heartbeat_interval to Configure()
reader/writer: add output buffering options
reader/writer/conn: move timeout and connect responsibility
reader/writer: move read loop into Conn
reader: separate configure
reader/writer: use callbacks rather than channels