Added Blob support and made encoding async

In order to add Blob support to Socket.IO (part of the larger binary
support), the encode function was made asynchronous (it now takes a
callback) because blobs are converted to ArrayBuffers via an
async FileReader method.

Tests were also added to test the encoding and decoding of Buffers and
ArrayBuffers. The reason there is a new special test method to test
encoded vs decoded ArrayBuffers is that decoded ArrayBuffers in node
don't have the slice function (it is native code that can't be
transmitted over msgpack). Not sure how big of an issue this is.

Because of this new async, we need to now worry about buffering, etc.
Ideally this would all be engine.io level, but dang blobs.

Blob support is very close to file support -- update on that soon.