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
deps: upgrade v8 to 3.18.0
v8: reapply floating patches