Data.STM.ByteQueue -> Data.STM.Queue
Generalize Queue module to arbitrary items, rather than ByteStrings

Limiting is now simply done by count, rather than total size.
Data.STM.Queue: add 'close' support
Data.STM.Queue: make 'close' return 'Left' on failure, rather than doing nothing
Data.STM.Queue: isEmpty: ignore if channel is closed
Switch to item-based API
Remove HTConnClosed, and call checkOpen in every accessor

This ensures that accessors consistently throw 'ErrorConnectionClosed'
after 'close' has been called.  It also removes some duplication and
complexity .

The original purpose of 'HTConnClose' was to avoid having to test 'connState'
in a few places.  Fortunately, 'recvLoop' and 'sendLoop' still don't have to
test it; they just test for queue termination (Data.STM.Queue forces them to),
and 'close' just terminates the queues.  'recvLoop' and 'sendLoop' are now
very straightforward, yet they handle connection termination properly.
Doc tweaks
Update testsuite (which is still very trivial)