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.

Draft:

`eventContextID` is the ID of the node to be the `this` object within the event callback. It's the sending node by default, but it can be changed to the receiving node (or another node) when the listener is adding by using the `node.events.event = node.events.add( function() {} [, phases ], thisArg )` construction.

`eventPhase` is relevant for dispatched events (those capture down and bubble up, such as UI events). If a listener is tagged for the `"capture"` phase, it will be invoked for event dispatches directed at or below the listener's node before lower nodes have a chance to receive the event. Regardless of any phase tags, if the event has not yet been handled, the listener will be invoked for event dispatches directed at or below the listener's node, after lower nodes have had a chance to receive the event. This is similar to the HTML DOM's `useCapture` flag: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener.