test: add asyncListener tests

These tests should cover all basic uses of the asyncListener API.
async_wrap: add AsyncWrap and asyncListener API

The AsyncWrap class simply allows to track asynchronous event flags so
MakeCallback can make intelligent decisions about what methods to call.
This way we can avoid much of the overhead that was inflicted upon
domains.

The AsyncWrap class is now inherited by several other classes, including
ReqWrap, HandleWrap, TLSWrap and others. This will allow us to call a
callback whenever one of those classes is instantiated. Allowing us to
know that some possibly asynchronous event will be fired.

Also added were process.addAsyncListener/removeAsyncListener.
addAsyncListener should be passed a callback, which will then be called
when any of the AsyncWrap inherited classes are instantiated, when
process.nextTick/setTimeout/setImmediate/setInterval are passed a
callback.

The argument passed to the async listener callback is the context of the
asynchronous event. Though in the case of process.nextTick it simply
passes the object containing the callback.
node: remove runAsyncQueue global check

I forget why this was initially added, but is no longer required.
node: extend _asyncQueue for domains

Now _asyncQueue is an object that will contain information about the
async listeners and any domains that are attached. This will run a
callback assigned to the "before" field before the callback is run, and
"after" callback after the callback has run. Each field is optional.
node: remove unnecessary assignation
node: don't require listener to be passed

This way the before/after/errror callbacks can still be attached to the
context w/o needing to run a listener and pass a domain.
node: add async listener error handling

The first thing when _fatalException is run is to then run
process._errorHandler. This will run though and first check if there are
any error callbacks waiting in the async listener queue to be run.
domain: begin adding async listener support