events: add initial observer support

Users can add an event emitter observer that will call a callback
whenever an event emitter is created. A storage value can also be passed
or returned that will persist with the event emitter instance.

The observer events before/after/error/add/remove will be added in the
future. Also with the ability to add an observer to an event emitter
that has already been created.
events: add observer to individual instance

Can add an existing observer to an existing event emitter instance.
events: WIP add before/after observer callbacks