events: add execution hooks

This allows developers to hook into key places during the EventEmitter
life cycle.

This has allowed domains to be removed from the EventEmitter.