Refactored AsyncSession to make it easier to implement asynchronous cursors properly.  Introduced a sub-interface of AsyncSession called AsyncServerSelectingSession and pulled down AsyncSession.getConnection(ServerSelector) into it.  Then added a getBoundSession(ServerSelector, Binding) method which return a new Session that is capable of supplying connections that are bound to either a single server that is cached based on the ServerSelector, or bound to a single connection to a server based on the ServerSelector.
Making the bound async connections classes package-private
Refactored Session to make it easier to implement  cursors properly. Introduced a sub-interface of Session called ServerSelectingSession
 and pulled down Session.getConnection(ServerSelector) into it. Then added a getBoundSession(ServerSelector, Binding) method
 which return a new Session that is capable of supplying connections that are bound to either a single server that is cached
  based on the ServerSelector, or bound to a single connection to a server based on the ServerSelector.