Heartbeat interval was too low compared to awaitCond sampling #3289
io-tests: simplify TcpConnectionSpec in preparation for coming modifications

This doesn't change any test logic, it merely structures the test fixture code a bit differently to make it easier to insert additional mocks required for coming additions.
io: small clean-ups
io: remove SelectionKey lookup and reduce IO-layer-internal message volume
io: add comments based on review feedback