add channel groups and convert firehose to use

A channel_group is a collection of channels that evenly distrubte
incoming messages using a round robin strategy.

The existing firehose tests were completely invalidated by this change
so have been removed with the intention of re-adding them in a future
commit. Thus, this commit is purely a proof of concept.