Make sure that Channel operations are run in order

Introduce a SequentialRunner 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.