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
streams: introduce .bulk function
net: implement ._writev for .bulk() support

Add Writev method to StreamWrap class for writing mixed array of strings
and buffers. Expose this method for TCP class.
http: write buffers when chunked to embrace writev
test: fix timing sensitive tests
benchmark: add chunked-encoding benchmark