Add a firehose channel

*This is an in-progress PR. It has been created early to allow for proper early review and tracking of issues.*

The firehose will syphon off raw messages and send them out over a specialized channel. This is primarily for internal uses as a way of attaching a drain to a single source to obtain an overall system state view.
Would this be cleaner as just another case clause to catch cases where `ChannelId` is the same as `FirehoseId`?