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.

I'm okay with leaving it if the intent is to factor it out at some point.  However, as it is, it's harder for a human to read because they see `kernelFunctionName` and then have to look back up to see what that value is.

Instead, I would suggest that when a conditional has established a constant value for a variable, the constant value be used instead of the variable throughout the conditional for clarity.