lint: use reinterpret_cast, not C-style casts
async_wrap: add provider types

These will be used to give the user greater control over what events
they wish to listen to.
async_wrap: initialize at end of constructor call

This does fail in several places where AsyncWrap has not run Init().
Will be fixed in the next commit, but keeping it separate because it
currently isn't the ideal solution.
async_wrap: call Init() after constructor

ReqWrap is inherited and also called directly, which means there are
several places where AsyncWrap::Init() has to be called after object
construction. I'm not fond of this, and would like to have a more
explicit way always calling AsyncWrap::Init() from the constructor.
async_wrap: pass provider to constructor

A few things have been globbed together, like ReqWrap, which will most
likely need to be broken apart later.
env: add watched_providers for AsyncListener

Now the second field in asyncFlags will tell if the provider is
currently being watched, or listened for.
node: make AsyncListenerInst field more explicit

"flags" could mean one of many things, and multiple flag types could be
checked. So make the field more explicit on what type of flags are being
stored.
node: pass calling context to create/error

Now that the instance has finished instantiating before create is
called, it is possible to pass the calling context as the first
argument.

The current calling context is stored within scope to access the
asyncQueue attached. This has the added benefit of allowing the context
to be passed to the error callback.