Made changes to the core storage of messages.
- Store message values as ArraySegment<byte> instead of string.
- Changed deserialize on IJsonSerializer to pass a TextReader instead of a string
- Created an ArraySegmentTextReader so data can be read from an array segment directly.
- Change the writing of PersistentResponse to write directly if the writer implements
  IBinaryWriter.
Make Encoding a public property of the message.
- Pass the Encoding explicitly when deserializing.
Write in chunks over the wire when using websockets.
- Generalize ResponseWriter for the WebSockets and IResponse
- Added SendChunk and flush to websokets.
- Enqueue send operations for websockets as well.
Use empty byte buffer if the message value is null.
Write a test for ArrayTextReader.
Ensure ResponseWriter can andle handle surrogate pairs.
- Added unit test.
Added flag to support reusing the buffer when writing chunks.
- By default websockets can't share the buffer since the underlying write action
 is queued in the task queue so make it false in the websocket scenario.
- Added unit tests.
Always use ChunkedBuffer with a 128 buffer size.
- Always call Flush after writing to the ResponseWriter
- Added more unit tests for more cases.
Made changes to creating messages.
- Changed the name of ResponseWriter to BufferTextWriter.
- Serialize directly to a memory stream instead of converting it to a string first.
- Made BufferTextWriter buffer size configurable.