Tuples: tweak to Substring, added EndsWith helper method

- tweaked Substring bound checks to allow ("Foo",).Substring(1) to return Empty, instead of an exception
- added FdbTuple.EndsWith helper method
- added a ToString() to FdbJoinedTuple (used a lot by the directory layer)
Directory Layer: a lot of refactoring to slim down the API, better handling of relative path and partitions (still WiP)

- DirectoryLayer accepts path relative to their root partition.
- Replaced all methods that take a 'string name' into extension methods
- Renamed FdbDirectorySubspace.MoveAsync(newPath) into MoveToAsync(newPath)
- Added logic to prevent moves between partitions
Directory Layer: added back override that take a transaction and a single folder name