build: vcbuild fix "The input line is too long."

vcbuild.bat is calling vcvars.bat, which doesn't detect if the environment
has already been set. This causes repeated entries to be added to the PATH,
which after a few invocations will lead to an error:
The input line is too long.
path: resolve normalize drive letter to lower case

make path.resolve work the same as path.normalize
async-wrap: add functionality, rm tracing module

* Generalize the ASYNC_PROVIDER being passed by the category to which
  it belongs. Instead of having specialized providers for classes like
  ConnectWrap.

* When instantiating a class in cases like receiving an incoming TCP
  connection the activeContext of the parent is no longer available
  because of the asynchronous call. In these cases manually set the
  parent class that contains the context that should propagate to the
  instantiated class.
  * Currently this only happens in tcp_wrap, pipe_wrap and stream_wrap.
    Though careful attention will need to be made in the future that
    other initializations of the same form are also wrapped.

* Force before/after callbacks to run when a class is instantiated, not
  only when a callback is about to be called from MakeCallback.

* Add asyncRemoveQueue() method so handles can disable async_flags_ when
  there are no longer any items in the queue.

* Remove all public facing API for the tracing module and replace with a
  process.binding('async_listener') to initialize hooks into the
  AsyncWrap class.

* Remove flag states of AsyncWrap::ProviderType. It's impossible to have
  and AsyncWrap instance with more than one PROVIDER.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
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.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
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.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
net: ConnectWrap now has FunctionTemplate

Created classes PipeConnectWrap and TCPConnectWrap so each one could run
AsyncWrap::AddMethods() during instantiation.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
fs: use FSReqWrap JS object

When instantiating FSReqWrap use a constructed JS object instead of
generating a new object in the C++ API in order to attach the oncomplete
callback.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
async-wrap: pass id to create callback

Since the object isn't passed to the create callback, pass the id() as
an argument.

Also, switch async_id_ to be a uint32_t instead of a double.
stream_wrap: ShutdownWrap now a FunctionTemplate

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
stream_wrap: WriteWrap now has FunctionTemplate
cares_wrap: now use FunctionTemplate
fs: remove makeCallback

There's no need to run fs callbacks in the global scope now that every
req creates its own object.
async_wrap, src: cleanup

Remove CATCH_RETURN_UNDEF and other minor things.
async_listener, cares_wrap: cleanup
env: simplify async_wrap calls

set_async_wrap_parent_class() is no longer a template method and
reset_async_wrap_parent_class() has been removed.
src: fix domain function casting

In debug mode V8 will fail on a bad cast. So only cast enter/exit if the
Value actually is a Function.
src: remove unnecessary ASSERT's

Since V8 will automatically fail in debug mode if the cast is incorrect
there is no need for us to do so.