Layout / readability improvements in QBufferedChan
Layout / readability improvements in QBufferedChan

Reduced the need for un-dequeuing, though it can still happen as the result of a race.
(It should no longer happen due to a select-related thread getting canceled.)

Reviewed the (many) if statements that govern semaphore signaling:

When closed, any waiting semaphore should be signaled.
After a successful get(), any waiting writer should be signaled or, if none exist, a reader if appropriate.
After a successful put(), any waiting reader should be signaled or, if none exist, a writer if appropriate.
After a failed select() (got through the turnstile but didn't get the select semaphore,) signal another thread's semaphore if conditions warrant it.
Upon waking to a canceled state, signal the next semaphore of the same type if appropriate.

glessard/swift-channels,glessard/swift-channels