Interface ChangeHub

Listeners are indexed with a key and when
an event is fired, only listeners with the same
key are invoked. The class manages the mapping
between key and listener. It is the users responsibility
to compute the key.