Unit testing fixes
Minor changes in SingletonChan and Buffered1Chan
Newer implementations for gcdSingletonChan and gcdBuffered1Chan, with unit tests.

By using more atomic operations, we can separately mutex the readers and the writers, without using a general mutex block.
Unfortunately this does not come close to making the blocks-based implementation as fast as the pthreads implementation.
(It might be possible to use the dual-mutex idea to slightly improve the speed of buffered pthreads channels, though)