crypto: free excessive memory in NodeBIO

Before this commit NodeBIO never shrank, possibly consuming a lot of
memory (depending on reader's haste).

All buffers between write_head's child and read_head should be
deallocated on read, leaving only space left in write_head and in the
next buffer.
v8: upgrade to v3.19.13
v8: reapply floating patches
src: upgrade after v8 api change

The prototype of v8::Persistent<T>::MakeWeak() has changed. Update the
code in src/ to follow suit.
test: fix up weakref.cc after v8 api change
lint: add mising isolates and minor style fixes
string_bytes: implement new v8 API

v8 has a new API to write out strings to memory. This has been
implemented.

One other change of note is BINARY encoded strings have a new
implementation. This has improved performance substantially.
string_bytes: use external for large strings

When large strings are used they cause v8's GC to spend a lot more time
cleaning up. In these cases it's much faster to use external string
resources.

UTF8 strings do not use external string resources because only one and
two byte external strings are supported.

EXTERN_APEX is the value at which v8's GC overtakes performance.

The following table has the type and buffer size that use to encode the
strings as rough estimates of the percentage of performance gain from
this patch (UTF8 is missing because they cannot be externalized).

encoding  128KB    1MB    5MB
-----------------------------
ASCII       58%   208%   250%
HEX         15%    74%    86%
BASE64      11%    74%    71%
UCS2         2%   225%   398%
BINARY    2234%  1728%  2305%

BINARY is so much faster across the board because of using the new v8
WriteOneByte API.
string_bytes: write strings using new API

StringBytes::Write now uses new v8 API and also does preliminary check
if the string is external, then will use external memory instead.
crypto: fix excessive buffer allocation

Allocate buffer only if the next one isn't free.
crypto: do not deallocate embedded buffer
crypto: ensure that read head is always non-empty
crypto: clear error on return in AddCRL
process: abstract out HandleToStream

Originally contributed by @tjfontaine, but modified to be faster and
more generic.
stream_wrap: introduce StreamWrapCallbacks

StreamWrapCallbacks is a helper class for incepting into uv_stream_t*
management process.
tls_wrap: embed TLS encryption into streamwrap
tls: introduce TLSSocket based on tls_wrap binding

Split `tls.js` into `_tls_legacy.js`, containing legacy
`createSecurePair` API, and `_tls_wrap.js` containing new code based on
`tls_wrap` binding.

Remove tests that are no longer useful/valid.
tls: share socket._hadError with http_client
cares: fix uninitialized variable warning

Suppress the following warning:

  ../../src/cares_wrap.cc: In function ‘v8::Handle<v8::Value>
  node::cares_wrap::SetServers(const v8::Arguments&)’:
  ../../src/cares_wrap.cc:1017:5: warning: ‘uv_ret.uv_err_s::code’
  may be used uninitialized in this function [-Wuninitialized]
stream_wrap: fix signed/unsigned comparison warning