Transactionals: Added a version of db.WriteAsync() that takes an async lambda to prevent a frequent misuse

- Passing a Func<.., Task> to WriteAsync(..) does not fail at compile time, and cause problems at runtime.
- Added a version of WriteAsync that task a Func<..., Task> in order to prevent that
- Added comments and a few missing nullchecks
Experimental: added IFdbSubspace interface on IFdbDatabase

- DO NOT USE YET! the IFdbSubspace interface is still a work in progress
Directory Layer: added missing override of FdbDirectoryLayer.Create() that can take a custom nodeSubspace