Added packet buffering to client

The addition of blob and file binary support required the
encoding -> engine-writing portion of socket.io to become
asynchronous.

This asynchronous-ness broke the previous
expectation that events would be received by the server
in the order they were emitted by client. To fix this,
buffering was added ot manager.js -- if a packet needs to
be sent, but another one is already being encoded, it is
added to a packet buffer / queue that is processed whenever
the current packet is written. This ensures that packets are
sent in the desired order.

The cleanup function in manager was also modified to clear
the buffer on a disconnect.

Tests were written (with parts in connection.js and server.js)
to test the buffer -- we see that asynchronous blobs are emitted
in the correct order and that on disconnect the buffer is cleared.
made blob buffer test more robust