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.