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.