Moved nested iterator class outside of FdbAsyncEnumerable

- FdbAsyncEnumerable.FooIterator => FdbAsyncFooIterator
Added logging in OpenDatabaseAsync, and throw correct exception if token is already canceled
Made FdbFuture<T> derive from TaskCompletionSource<T> to spare one allocation, and put non-async code inside #if blocks
Cleaned up sandbox test executable
Prototype of an async producer/consumer pump and buffers [WiP]

- Pump would call MoveNext on an inner async sequence, and push on a buffering queue with max capacity
- Buffering queue blocks producer if full (Task OnNextAsync(T value))
- Consumers wake up producer when they consume a value
- Producer and Consumer can specify a CancellationToken when waiting
Added SelectAsync<T,R> extension method

- execute task on all items in parallell, but returns results in the same order they came
- name may change