Plugged connection/connection source leaks in async operation execution

 JAVA-1578
Fixing race condition on close.  Since we're checking that connections are all checked in after every test, there is
a race because the close method asynchronously kills the cursor and has a connection in use until it completes.
Ensured that ByteBuf instances are released in all Stream implementations in the case where an error is reported
and the ByteBuf is not being passed back to the caller (who is then responsible for freeing it).

 JAVA-1577
Added open/openAsync methods to Stream interface to make implementation simpler. Before this, implementations
either had to open in the constructor or in write/writeAsync.
Also removed unnecessary synchronization in NettyStream that made it prone to deadlock.  The Stream client
is responsible for ensuring that there is at most one call to read/readAsync and one to write/writeAsync going on
concurrently, so Stream implementations do not have to do their own synchronization.

 JAVA-1584, JAVA-1575