Implement deferred frame handling and a receive buffer limit.

If frame handling blocks the event loop longer than a given limit, defer the
next frame to the end of the event queue.  This reduces the opportunity for one
client to stall message handling for other clients.

Further, since frame handling is decoupled from the socket data event, a
receive buffer limit is included.  This limit indicates when the socket should
be pause()'ed, preventing the server from queuing many messages it isn't ready
to handle.