Fix theoretical deadlock in 'receive'

This fix comes from readChan [1]; see the note after it.

 [1]: http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/Control-Concurrent-Chan.html#readChan
Fix typo: sufficienctly -> sufficiently
Document blocking caveat affecting 'duplicate' and 'fold'

This is the same caveat that bit 'isEmptyChan' and 'unGetChan'; see GHC
ticket 4154 [1].  The problem is that 'receive' holds the 'ReceivePort'
lock while waiting on the hole.

This problem could be eliminated by making 'receive' wait on the hole
outside of the 'ReceivePort' lock, then take the lock again and update the
read end if it didn't change, retrying if it did.  However, this would
produce quadratic slowdown if there are many receivers.

 [1]: http://hackage.haskell.org/trac/ghc/ticket/4154
Optimize 'fold' by making it traverse the 'List' directly