refactor(executeOperation): fixes for implicit session construction
refactor(executeOperation): fixes for implicit session construction

 * When sessions are implicitly created, they mutate the options
   passed in for the current operation. We need to `unset` this
   value back to `undefined` after the implicit session has
   completed, or subsequent operations will attempt to use a stale
   session.

 * Allow an option to `executeOperation` to indicate that the op
   results in a cursor, and therefore the implicit session should
   not end directly after the operation completes (subsequent
   `getMore` ops should reuse the session).

 * An early check has been added to determine if a passed in
   session has already ended.  The actual spec-based check for this
   is in Pool.write in core, but adding this preliminary check can
   assist in providing better stack traces even if it might not
   catch all cases.

NODE-1088

mongodb/node-mongodb-native,mongodb/node-mongodb-native,mongodb/node-mongodb-native,mongodb/node-mongodb-native