Optimize 'fold', document blocking caveat of 'duplicate', and fix race in 'receive'

Please see the commit messages.  In particular, `duplicate` has the same [blocking caveat][4154] that bit [isEmptyChan] and [unGetChan].

 [4154]: http://hackage.haskell.org/trac/ghc/ticket/4154
 [isEmptyChan]: http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-Chan.html#v:isEmptyChan
 [unGetChan]: http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-Chan.html#v:unGetChan