NCBC-740: Update IO to use SocketAsyncEventArgs and a contiguous buffer

Motivation
----------
The client was previously using the older .NET API for asynchronous socket
communication based off of IAsyncResult and and callbacks. Because each
send recieve requires a new IAsyncResult instance, this causes GC issues
in high-thouroughput situations. The new SocketAsyncEventArgs API improves
on this by doing away with the need to IAsyncResult instances and uses a
single contiguous buffer which is reused and eliminates the requirement of
creating new buffers for every read or write.

Modifications
-------------
The Connection class was rewritten to use SocketAsyncEventArgs instead of
Socket.BeginAsync/EndAsync. A BufferAllocator class was added to allow for
a single contiguous buffer to be used (which is pinned by SAEA), finally
configuration was added so that the size of each buffer and the pool size
can be configured. By default their is a 16K buffer per connection, this
can be changed through the PoolConfiguration.BufferSize. The total size of
the pool is always: PoolConfiguration.MaxSize *
PoolCOnfiguration.BufferSize, where MaxSize is the total size of the
connection pool.

Result
------
In general, users should see improvments in performance and a decrease in
the number of GC's compared to previous releases.

Change-Id: Ie5ec93312ad935f145301f6bb71183ced084f970

Conflicts:
	Src/Couchbase/Couchbase.csproj
Change-Id: If973b4562f5b0fa2409cd87d3eaa1b44860e6e7f
Reviewed-on: http://review.couchbase.org/44440
Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Tested-by: Jeffry Morris <jeffrymorris@gmail.com>