func NewMuxObserver(qlen, reglen int) *MuxObserver {
	rv := &MuxObserver{
		subs:  map[*subObserver]map[chan<- interface{}]bool{},
		reg:   make(chan taggedRegReq, reglen),
		input: make(chan taggedObservation, qlen),
	}
	go rv.run()
	return rv
}
NewMuxObserver constructs  a new MuxObserver.

qlen is the size of the channel buffer for observations sent into
the mux observer and reglen is the size of the channel buffer for
registration/unregistration events.
package broadcast
type taggedObservation struct {
	sub *subObserver
	ob  interface{}
}
const (
	register = iota
	unregister
	purge
)
type taggedRegReq struct {
	sub     *subObserver
	ch      chan<- interface{}
	regType int
}
type MuxObserver struct {
	subs  map[*subObserver]map[chan<- interface{}]bool
	reg   chan taggedRegReq
	input chan taggedObservation
}