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.