reader: avoid recursive RLocks

* use a more granular lock on q.maxInFlight to avoid recursion
* use a more granular lock around connections
* don't hold RLock over q.ConnectionMaxInFlight
reader: refactor random 'test water' conn. block

avoid holding RLock over q.updateRDY
Merge pull request #29 from mreiferson/recursive_locks_29

Potential deadlock on startup
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
quite verbose debug logs
reader: dont immediately set the conn's stopFlag
fix clean exit/improve naming