Refactored the way time is measured in FdbOperationContext

- the Stopwatch is now private, and we only expose TimeSpans
- tr.Context.Elapsed is the time since the last reset/retry
- tr.Context.ElapsedTotal is the time since the creation of the transaction
AsyncLINQ: refactoring to better handle composition of filters and transforms, added observers and initial implementation for sorting

- AsyncFilterExpression and AsyncTransformExpression help combine filters and selector that could be either sync or async.
- Fixed bug where in a foo.Select(...).Where(...) the Where could be evaluated before the Select
- Added .Observe((x) => { ...}) that can execute actions on each element of the sequence, but without changing the result
- Added the notion of QueryStatistics<T> that can be used to measure what flows through some part of the query
- Added TakeWhile(.., out QueryStatistics<bool> stopped), and other like WithCountStatistics(..) or WithSizeStatistics(...)
- Fixed most aggregate methods to call into FdbAsyncIterator<T>.ExecuteAsync(..) whenever possible, instead of calling MoveNext() manually.
- Added initial support for sorting (not complete)
Fixed crash in FDBShell command 'count' if directory path not found
Organized projects using Solution Folders
NuGet: changed from MS.Bcl.immutable 1.1.29 to the new name System.Collection.Immutable 1.1.32

- note: only impacts experimental in memory db
AsyncLinq: added Distinct(), MinAsync(), MaxAsync(), ElementAtAsync(), and ElementAtOrDefaultAsync()
AsyncLinq: added some [NotNull] and cleaned up spaces
Fixed crash in FDBShell command 'count' if directory path not found
AsyncLinq: better callstack

- try to preserve the callstack if a lambda in a Select(..) or Where(..) throws
AsyncLinq: better callstack

- try to preserve the callstack if a lambda in a Select(..) or Where(..) throws
Renamed FdbEncoderSubspace<...>.EncodeKeyRange(...) to EncodeKeys(...)
Tupels: added an API for custom decoders to parse packed tuple segments

- Added enum FdbTupleSegmentType
- Made all the FdbTupleParser.ParseXYZ public
- Added FdbTupleParser.VisitNext<T>(...) helper to decode one segment at a time
- Added FdbTupleParser.Skip(...) to skip N first tuple segments (ie: decoder wants to decode only the 3rd segment...)
AsyncHelpers: made some change to Maybe<T> and IAsyncTarget<T> to be able to build on .NET 4.0

- ExceptionDispatchInfo does not exist in NET40 so we use regular Exceptions
- renamed Maybe<T>.ThrowIfFailed() to ThrowForNonSuccess() so that it matches TaskAwaiter<T>.ThrowForNonSuccess()
KeyValueEncoders: renamed all EncodeRange/DecodeRange to EncodeKeys/DecodeKeys and EncodeValues/DecodeValues

- Matches with the names for tuples, and also remove ambiguity between encoding keys and values
AsyncHelpers: made some change to Maybe<T> and IAsyncTarget<T> to be able to build on .NET 4.0

- ExceptionDispatchInfo does not exist in NET40 so we use regular Exceptions
- renamed Maybe<T>.ThrowIfFailed() to ThrowForNonSuccess() so that it matches TaskAwaiter<T>.ThrowForNonSuccess()
Merge branch 'master' into refac_tuples