Improved version of the queue-based buffered channel, BufferedQChan<T>

Many details to speed things up, including:
- final variables. They help.
- check optionals against nil as seldom as possible. Somehow, that operation is really slow.

Thanks to these two items, Queue<T> was substantially sped up.

The pthreads-based channel classes are returning to a hierarchy; less code duplication.
For now most of the code duplication is in the critical take() and put() methods.