Manage listeners from the kernel

Have the kernel directly manage event listeners. Support namespaced event names.

The kernel will use a private namespace in `branch/collection-events` to send meta events into the application using names that won't conflict with any possible application event name. Additionally, the kernel will need to have direct knowledge of event listeners in order to replicate them correctly.

This is a predecessor to `branch/collection-events`, which uses the event mechanism for the kernel to deliver meta events into the application.

@eric79 , please review.

Yes. And I think some of them can go away.

Originally I had `initializeListeners` only on `creatingEvent`. But listeners can also be added to nodes that derive from the node that defines the event. So the add/remove/flush handlers got `initializeListeners` too to ensure that the spot to collect the listeners is there.

Only `addingEventListener` really needs it. `addingEventListener` can keep a renamed `getListeners`. `removingEventListener` and `flushingEventListener` can use a new `findListeners`, which would return undefined if no listeners have ever been added. `creatingEvent` probably doesn't need to call this at all.