Add opportunistic parsing and raw read/write. 

This fixes both #72 and adds opportunistic parsing.

Summary : 
- Only parse packets if we have a listener for it, otherwise just skip the bytes.
- Adds a new event type, 'raw.packetname', which gives the buffer instead of the parsed packet upon receiving. Note that this gives the buffer including the length prefix and the ID. 
- Adds new writeRaw method which simply encrypts given buffer and send it to the client
- Override Client.on() to fuse all the different "packet" events into one, the named event.