First stab at a Chan that doesn't use pthread_mutex.
GCD buffered channels were made the official buffered channels
Moved the pthreads implementation to a separate file for the purpose of future benchmarking.
An unbuffered chan implementation for GCD. Still has a race condition.

The solution is to *always* resume one queue upon suspending the other.
Resuming one queue is not relevant to the other , since if both queues are empty they should both be active.

The reason the buffered version did not have this problem is that the number of situations where a queue get suspended is so much smaller.
The suspend/resume rule applies to all cases, however, and should be enforced.
Got rid of the (silly?) Signal class in favor of just closures. Signal is not a typealias for () -> ().
Completed the Chan implementations using Grand Central Dispatch (dispatch_sync for the win).

Along the way also improved the type interface for the channel-select constructs. Lots of fragility there in beta 6.
A little benchmarking code. The pthread-mutex is lots faster than the synchronous block dispatch stuff.

Included a similar benchmark in go. *that* is fast.
Update the typed Select() function for the renamed interfaces in select-types
The Merge() and Select() function appear to be fragile as to their degree of Genericity. Select<T> works, Select<C: SelectableChannel> does not.

Different versions saved; must find a good test case.