Has-a-broadcaster

This commit refactors `Broadcaster` so that instead of classes extending `Broadcaster`, they implement the `IListenable` interface which indicates that they have a `broadcaster` member object.

I also improved the semantics + documentation of the `StrictEqualityAssociativeArray`.

Architecture review requested ( @jtlan @themadcreator @bmalehorn @lewin), the awkward bit is that an `IListenable` maintains a `broadcaster` and the `broadcaster` constructor takes an `IListenable` so that it can pass the listenable as the argument to the broadcast callback, maintaining the previous semantics. However this circular ref feels a bit weird. Regressions are very unlikely, so no QE needed.