Simplified FDBFuture logic to be able to expose cancellable Watches

- FdbTranaction.WatchAsync returns a FdbWatch (that wraps a FdbFuture<Slice>) and can be cancelled/disposed
- Simplified handling of cancellation in FdbFuture<T> (especially in case of errors)
- Removed AsTask() from FdbFuture<T> because since it is a TaskCompletionSource, one can just call the Task getter.
- Removed old blocking code