Linq: added CountAsync() helper on FdbRangeQuery

- Can be used later to add an optimized path when counting ranges (no need to accumulate all the keys/values in memory)
Logging Filter: added SetOption command to be able to log options being set on transactions
Made some change to speed up Fdb.System.EstimateCountAsync:

- disable ReadYourWrites on the transaction to reduce the amount of data read from the db (at the custom of some added latency)
- switch to using get_range when the windows size is small enough.
- cleaned up debug traces
Fixed EstimateCountAsync when reading the last segment
Fix tuple StartsWith and EndsWith. It was using == instead of Equals, which became a ReferenceEquals check when a[i] and b[i] were typed as objects.
Passing in an empty prefix now results in an error
Logging Filter: changed formatting of lines with empty duration (annotations, set options, ...) only show the timestamp and message
Updated Fdb.System.GetBoundaryKeys to use WANT_ALL streaming mode (faster) and added annotations

- Also, only set AccessToSystemKeys option once per retry
Use object.equals to test for equality
Merge pull request #16 from ajbeamon/master

Fix bug in CreateOrOpenInternalAsync when recursing into a partition
CancellationToken refactoring : BREAKING CHANGE

- No more optional cancellation tokens (too dangerous!)
- Any async operation that may timeout or loop infinitely must be passed explicitely a CancellationToken
- Users can still pass CancellationToken.None, but then they should think very hard on the consequences in case of timeout/deadlock
- Added a commond FdbTest class that helps dealing with the CTs in the unit tests
- Renamed a few publicly visible 'ct' into 'cancellationtoken' (may have missed a few)
- Work in progress !
Added helper method Slice.JoinBytes()

- equivalent of Slice.Join(...) but returns a byte[] array with the proper size
- tweaked Slice.Join() to also allocate a buffer with the exact size of the result
Cancellation [Breaking Change] : Renamed IFdbTransaction.Token property to IFdbTransaction.Cancellation

- "'token" is an ambiguous keyword that can have a different meaning in most applications (security, full text search, parsing, ...)
- "tr.Cancellation" is self explanatory
FdbTransaction does not implement IFdbTransactional anymore

- renamed all "dbOrTrans" arguments to "db"
Tweaked Slice.ToAsciiOrHexaString() to better handle JSON or UTF-8 strings
Fdb.System: moved GetCoordinatorsAsync() and GetConfigParameter() to the Fdb.System class, added Fdb.System.GetStorageEngineModeAsync()
AsyncLinq: fixed bug in AsyncTransformQueue (used by SelectAsync) that would drop items that arrive when the queue is full and all the tasks are still pending

- OnNextAsync(...) needs to retry when the queue is full
DirectoryLayer: fixed tests because empty of whitespace folder names are now allowed
Removed hardcoded cluster file in memory store test that was preventing tests from running
Tuples: [POTENTIALLY BREAKING CHANGE] fixed behaviour of tuple[from, to] helper to match with Python, where 'to' is EXCLUDED

- Previous implemented treated the 'to' offset as included, which is not how it works in python: tuple[0, -1] now removes the last item, while before it was returning the whole tuple.
- Renamed from/to, into "fromIncluded"/"toExcluded" to remove the ambiguity in the API.
- Most tests seem to pass. If your tuples start returning one item less than before, this is probably because of this commit. Sorry ! :)
- Replaced FdbSubspaceTuple by FdbPrefixedTuple which only holds onto the binary key, and not the subspace itself.