reader: tests / centralize RDY handling

this adds better test coverage for backoff and recovery and refactors RDY handling to a single goroutine per reader rather than per connection.  ping #1 cc @jehiah