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: pass provider to constructor

Knowing the origin of the constructor will allow filtering when
callbacks are called.
env: add watched_providers for AsyncListener

Now the second field in asyncFlags will tell if the provider is
currently being watched, or listened for.