Notify using an Object, not a Selector

Previously, a Selector was used both to register interest in Events
and to key the notification of a new Event. This was somewhat
confusing as the two uses were different, and it perhaps didn't make
sense for a Selector to be used in both places.

This commit updates notification to take an Object as the key, while
retaining the use of Selectors for registering interest. As part of
this change, the tracking of usage counts has been moved from
Selector into CachingRegistry where they're used for load-balancing.
This was necessitated by stopping the use of Selectors for
notification. It has the benefit of improving the separation of
concerns - a Selector, that has no knowledge of load balancing, no
longer has to track usage count which is only used for load balancing.

The cache of matching registrations is now a Map of notification key
to registrations. It should be noted that, for this to perform well,
notification keys must having fast hashCode and equals implementations
Merge branch 'notify-with-object'