Remove all AsyncListener JS code

Squashed for simplicity. There are also changes in the naming of some of the native API's so what it's called actually reflects what is going on. Also added a few TODO's, etc.

Review, comment, and if necessary I'll break up the commits into relevant segments.

Also, didn't add https://github.com/tjfontaine/node/commit/6a74d6c to the changes. If that conditional is hit then there's a bug in the code. I'd rather add an `ASSERT()` or the like that can be reported instead of silently ignored.

/cc @tjfontaine @indutny @orangemocha
Yes. This check is for specific cases like incoming TCP connections. Because receiving the connection is asynchronous, the call stack to the server is destroyed. Hence the call to `env->set_async_wrap_parent_class<T>()` in `tcp_wrap` just before the instantiation of the JS object for the incoming connection. That way the connection can be traced back to the server that is the reason the incoming connection exists.

Now, to put all that into code comments...