Each topic maintains 3 primary goroutines. The first one, called the `router` is for reading messages off the incoming go-chan and storing them in a queue. The second one, called the *messagePump* is for copying and pushing messages to channels. The `messagePump` takes advantage of a `select` block that, amongst other things, receives new channel events (mutating a local slice of `Channel` pointers), avoiding the need for explicit locking around the aforementioned `map` in this tight loop.  The third one is only used in the case where the memory queue is full and the diskqueue is required.  We will cover more about disqueues later.