Cleaned up FdbFuture code

- TrySetTaskResult -> HandleCompletion
- TrySetXYZ => SetXYZ
- no need to return a bool if nobody reads the result
- use ThreadPool.UnsafeQueueUserWorkItem: we don't need to flow the ExecutionContext of the network thread anyway
Renamed GetBatchValuesAsync into GetValuesAsync
Simplified GetBatchXYZ() methods

- GetValuesAsync() methods return a list of the values
- GetBatchAsync() methods return a list of key/value pairs
- removed GetBatchIndexed() methods because the index can easily be obtained using LINQ indexed version of Select()
- Optimized FdbTuple.BatchPack(...) for arrays (pre-allocate the buffers)
Refactored Futures to be able to track multiple handles into a single Task<T[]>

- FdbFuture<T> is not a base abstract class
- FdbFutureSingle<T> tracks a single future handle and returns a T
- FdbFutureArray<T> tracks an array of future handles, and returns a T[]
- GetValues(...) has been rewritten to use FdbFutureArray<T> significantly reducing the Task overhead when fetching a lot of ids
Updated API Version to 100 for fdb 1.0 release

- No other changes in the C API
- updated the Readme with infos about the community edition