Directory Layer: refactored internal API to be able to pass read-only transaction to OpenAsync() and TryOpenAsync()

- Similarily to the go and java binding: CreateOrOpenInternalAsync(...) asks for two arguments of type IFdbReadOnlyTransaction and IFdbTransaction, an will only use the latter if it needs to write to the db