async-wrap: macro-ify AsyncWrap::ProviderType's

Making all the provider types a macro expansion allows them to be
declared in one location but used in many places. This makes maintenance
easier as more providers are added.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
async-wrap: all new instances get a unique id

Every AsyncWrap instance recieves a unique id. A new C++ and JS API have
been exposed to retrieve this value:

* AsyncWrap::id()
* handle.asyncId()

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
node: fn to add undefined prototype properties

Add convenience function to add undefined properties to a
FunctionTemplate's prototype. This is useful when properties will be set
in the future on the instantiated object, without V8 changing the object
map.
dgram: SendWrap now has FunctionTemplate

In order for SendWrap to have access to the additional methods in
AsyncWrap, the request object needs to be an instance of a
FunctionTemplate.