async-wrap: fix coverage and providers

* Generalize the ASYNC_PROVIDER being passed by then category to which
  it belongs. Instead of having specialized providers for classes like
  ConnectWrap.
* When some classes are instantiated from a libuv callback there is no
  activeContext, so manually set the parent class that contains the
  context that should be used for class instantiation. This will allow
  proper propagation.
* Force before/after callbacks to run when a class is instantiated, not
  only when a callback is about to be called from MakeCallback.
* Add _removeAsyncQueue() method to handles so when there are no longer
  any items in the queue async_flags_ can be reset.
* Manually track additional states in Environment. For example: the
  length of the activeContext queue, the provider type of the
  activeContext or whether any AsyncListener callbacks are being
  processed.
asynclistener: update to match AsyncWrap changes

* Pass if the error was handled as the fourth argument to the error
  callback handler.
* Move all properties to single _async object.
* Only run callbacks for watched providers.
* Each asynchronous call chain is independent and the listener can be
  removed at any time for that specific branch in the call stack.
* Each AsyncListener tracks its own watched providers. These are
  accumulated on _async.watchedProviders for quick checks when the
  run/load/unload functions are called.
* When an AsyncListener is removed, it's removed from the activeContext
  and from every context in the contextStack.
asynclistener: only run after if before could

If an AsyncListener was added in the middle of an async execution chain
then it was possible for the after callback to run w/o the before
callback having had a chance to run.

This make sure the before callback has a chance to run, or the after
callback will be skipped.
test/doc: add remaining changes for asynclistener