Ensure Async cursors can be cancelled

Refs: https://jira.mongodb.org/browse/JAVA-1259

Also added a `CancellableBlock` allows us to cancel getMores in rxJava and allows users more control.

Due to the way we wrap the async driver I had to manually test that unsubscribing works with observables.  But we confirm it works with the async wrapper and rxJava confirms observable subscriptions work.  So we follow the guidelines here: https://github.com/Netflix/RxJava/wiki/Implementing-Your-Own-Operators#other-considerations