Use ThreadPool.UnsafeQueueWorkItem in unit test to trigger async signal
More refactored on FdbDatabase and added the PartitionTable layer

- Removed the db.Root/FdbRootDirectory combo, replaced with a FdbDatabasePartition class that wraps a db and a root layer.
- FdbDatabasePartition implements IFdbDatabase, so can be used with any layer.
- Moved a lot of instace methods out of the FdbDatabase class, and into extensions methods hanging off the IFdbDatabase interface
- Fdb.PartitionTable static helper can be used to open database with a specific DirectoryLayer, and also lookup their prefix into a master "Partition Table".
- Moved bulk operations from Fdb.Bulk.xxx to static extension methods in FdbBulkOperations.
- Update the unit tests to use the new PartitionTable (it will work under the "Tests" named partition)
- Added missing "GetAddressesForKeyAsync" method on IFdbReadOnlyTransaction