Make sure that Channel operations are run in order

Introduce a RunQueue class to assist with running
operations in order. Use this class to ensure that operations
within the Channel objects returned by Concurrent.broadcast
and Concurrent.unicast execute their operations sequentially.

This change *may* fix a race condition in Play's WebSocket
code (see #2646), but this hasn't been verified.
FIXUP: formatting
Merge pull request #2744 from richdougherty/sequentialrunner

Make sure that Channel operations are run in order