More work on FdbSubspace

- added the subspace[Slice] and subspace[Tuple] helper method to create sub-subspaces
- added FdbKey.Directory (\xFE) and FdbKey.System (\xFF) singletons
- moved the Concat(prefix, ...) helpers to the FdbTuple static class
- Use subspace[FdbKey.Directory] instead of FdbTupleAlias.Directory (simpler)
- FdbSubspace.m_rawPrefix (readonly)
- renamed m_namespace to m_globalSpace in FdbDatabase
- Disallow using Slice.Nil for creating/partitionning subspaces (Slice.Empty is allowed and is a no-op)
Fixed build in Release due to renaming Namespace to GlobalSpace
Renamed .Start/.Stop into .Begin/.End

- .Start/.Stop comes from python's built-in slice object used to return pairs of keys, but all other bindings use .begin/.end
Cleaned up FdbKeyRange helper methods

- StartsWith(key), returns [ key, strinc(key) )
- FromPrefix(..) => PrefixedBy(...) and returns [ key+\0, strinc(key) )
- removed FromPrefixInclusive (replaced by StartsWith)
- added Descendants(key) that returns [ key+\0, key+\xFF ) and should be used by tuples
- added DescendantsAndSelf(key) that returns [ key, key+\xFF ) is you need to include the tuple itself
Changed the encoding of GUID to RFC 4122 (big endian), and added the Uuid helper type

- use big endian ordering for uids stored in the db, to be compatible all other bindings and languages
- System.Guid is converted to RFC 4122 when writing, and back to little endian when reading
- FoundationDB.Client.Uuid is a clone of System.Guid, but uses Big Endian.
Improved test coverage on the Slice class, cleaned up, added comments
Merge pull request #4 from ajbeamon/master

NextWriteNoWriteConflictRange Option; FdbException constructors made public
Fixed typo
Fixed serialization of Uuid passed as objects
Moved FdbKeyRange.Descendants() and DescendantsAndSelf() to the FdbTuple static clas
Also use Iterator streaming mode for doing FirstOrDefault()/SingleOrDefault() on range queries

- If there is a Where(..) clause in the LINQ query, we may need to read more than one value from the db anyway.
Minor tweaks
Removed the db.RestrictKeySpace(...) feature, because it is clunky and redundant with GlobalSpace / DirectoryLayer

- it is not clear it the range bounds should be included or not
- you can do the same thing using the global key space, or subspaces
- it slows down key validation (called for all Get/GetKey/GetRange methods) for not a lot of added value
- it could be added back some day if it gets handled natively by the C client API.
Better support for handling 'object' values in tuples (where the type is not know at compile time)

- Fixed the generic Pack<Object>(...), Create<Object>() and  Concat<Object>(...) methods
- Added non-generic PackBoxed(object), ConcatBoxed(..) and BatchPackBoxed(...) methods
- Renamed DeserializeObject to DeserializeBoxed to match
- Renamed Create(IEnumerable<object>) into FromEnumerable(...) to fix overload resolution ambiguity by the compiler.
- Renamed Create(object[], int, int) into FromArray(...) for the same reason.
- Added more unit tests