url: Escape all unwise characters

This makes node's http URL handling logic identical to Chrome's

Re #5284
url: ~ is not actually an unwise char
http: escape unsafe characters in request path

Make http.request() and friends escape unsafe characters in the request
path. That is, a request for '/foo bar' is now escaped as '/foo%20bar'.

Before this commit, the path was used as-is in the request status line,
creating an invalid HTTP request ("GET /foo bar HTTP/1.1").

Fixes #4381.
test: add extra checks
http: split Agent into its own file
http: move IncomingMessage into its own file
http: move parsers into _http_common.js
http: move OutgoingMessage into it's own file
http: move Server and ServerResponse out
http: split Client into _http_client.js
handle_wrap: fix NULL pointer dereference

Fix a NULL pointer dereference in src/handle_wrap.cc which is really a
use-after-close bug.

The test checks that unref() after close() works on process.stdout but
this bug affects everything that derives from HandleWrap. I discovered
it because child processes would sometimes quit for no reason (that is,
no reason until I turned on core dumps.)
cluster: s/tcpSelf/server/
cluster: s/handler/handle/
cluster: clean up lib/cluster.js

Clean up and DRY the cluster source code. Fix a few bugs while we're
here:

* Calling cluster.Worker(env) in a non-constructor context would create
  the Worker object but lost the env argument.

* Short-lived handles in long-lived worker processes were never
  reclaimed, resulting in resource leaks.

* Handles in the master process are now closed when the last worker
  that holds a reference to them quits. Previously, they were only
  closed at cluster shutdown.

* The cluster object no longer exposes functions/properties that are
  only valid in the 'other' process, e.g. cluster.fork() is no longer
  exported in worker processes.

So much goodness and still manages to reduce the line count from 590
to 325.