Tuple Layer: Changed the typecode of GUIDs from 0x03 to 0x30 (BREAKING CHANGE)

- Will prevent a collision with the 'newtype' stuff that will use 0x03 for nested tuples
- The 0x30 typecode is not final and may have to change again !
Reworked the pretty printing of keys

- Added a PrettyPrintMode with Single, Begin and End, to help decode ranges
- Reworked the tuple sniffing logic for begin and end keys, to support also the ranges with +<00>/+<FF>
Continued work on Key/Value encoders [Work in Progress]

- Separate the typecodec logic from the key/value handling logic
- Type codecs are only interested in how to convert Ts into byte arrays, ordered or not, single or parts
- Key/Value encoders are only interested in how to combine composite keys and or values together
- Added helpers methods like KeyValueEncoders.Ordered.xxxx() or KeyValueEncoders.Unordered.xxxx() to help create encoders from type codecs
- Added Encode/Decode methods on subspace to help deal with adding/removing the prefix
Continuing work on new type system (Work in progress)

- Split type codec interface into IOrderedTypeCodec and IUnorderedTypeCodec so that layer can specify what they want clearly
- Simplified FdbArray and FdbQueue to only have FdbArray<T> and FdbQueue<T> (the Slice versions will use a special identity type codec)
- Removed previous attempts (FdbValueEncoder, ...)
- DO NOT USE YET !
Log Filter: added Annotate(...) overrides that can format arguments
Fixed the leak test sample

- Renamed command to "leak", added "slow" and "fast" arguments to speed up / slow down the speed.
Fixed off by one when parsing the cluster identifier in a cluster file
Added a quick implementation of Slice.IndexOf(), Slice.Join() and Slice.Split().
Added a ctor to SliceWriter already initialized with a prefix

- used by FdbSubspace.OpenBuffer()
Added back the FdbTuple<T1, T2, T3, T4> struct

- needed for the type codecs
Removed experimental layer "VersionedTable"

- not very usefull, and not working properly anyway
Removed the old FdbArray layer, because it is redundant with FdbVector, and has less features.
Tweaked equality comparison for Maybe<T>

- works better in unit tests with Is.EqualTo(...)
Refactored key encoders and value encoders

- Separate IKeyEncoder<T> and IValueEncoder<T>
- ICompositeKeyEncoder<T1, T2, ...> uses typed tuples to return multiple arguments, supports for partiel encoding / decoding
- Added a few default encoders for simpel types, and tuples., as well as binding methods for create encoders from codecs or lambdas
- Updated most layers to accept key and/or value encoders (and use the tuple encoding when no encoder is specified, when possible)
- Added Optional<T> struct (name may change!) used as a 'nullable' return type for async methods that accepts structs AND reference types
- Made the implementation of Vector and Table generic by default.
- Update most layers to return Task<Optional<T>> for all methods that can either return a decoded value, or a "not found"
Added the 'Encocer' suffix to the default typed encoders

- This is to prevent ambiguous type matching with System.String, String.Guid, ...
- cleaned up the unit tests
Fixed some unit tests