Added a runtime check on the mutation type when doing atomic operations
Added FdbKeyRange.GetHashCode()
Added a unit to verify that GetKeyAsync(...) conflicts when it should.
Tuple Layer: Optimized unpacking of tuples with Guid and Uuid elements
Tuple Layer: fixed perf regression with FdbTuple<T1, T2, T3, T4> and too many generic type combinations

- unit test that creates reandom tuples went from 3sec to 60se cwith 57% of JIT time due to explosion of combinations of types (N^3 => N^4)
- changed IFdbTuple.Append<T>() methods to return non-generic tuples when possible (because the caller doesn't care about that)
- only the <concrete_type>.Append<T>() methods try to return generic types (because here the caller care about it)
Refactored the Contract helper class

- it will only exist in Debug configurations
- marked methods as [DebuggerHidden] so that the debugger breakpoints in the user code and not deep into RaiseContractFailure
- removed the "test" argument that was never used
- added [CallerLineNumber] and [CallerFilePath] optional argument to each methods
Reverted the platform target from x64 to AnyCpu

- Cause too many problems (Profilers, Nuget, ...)
- People may want to use the layer code in x86
Made the FdbOperationContext ctor public
Refactored Slice, added SliceComparer, native memory copy/cmp, param checks

- Moved all copy/compare methods to SliceHelpers
- Uses the native memcmp() and memmove() when possible
- Added SliceComparer.Default when using slices in maps (ordered or hash-based directories)
- Added param checks to protect against malformed slices (negative offsets, null arrays, ...)
- Added a view DebuggerTypeProxy helpers to Slice and SliceWriter that return a byte[] of the correct size
- Added more methods and fixed a few bugs in  SliceBuffer
Slices: Added more checks, fixed a few bugs, more test coverage

- fixed bug in slice equality (Slice.Nil should not be equal to Slice.Empty !)
- added more param checks for malformed slices and buffers