Fixed log message when calling Cancel() on a Transaction

- "Cancel" vs "Rolled Back"
Added IFdbDatabase and IFdbReadOnlyDatabase interfaces

- contains the BeginTransaction(..) and BeginReadOnlyTransaction(..) methods
Implemented true "read only" transactions and made FdbDatabase implement IFdbDatabase + various bugfix

- BeginReadOnlyTransaction(...) creates a transaction that will throw on write operations (prevents people from casting an IFdbReadOnlyTransaction to an IFdbTransaction)
- BeginTransaction(...) creates a transaction that will accept both read and write operations.
- Made sure that all write operations fail if the transaction has been created as readonly.
- Added methods to the transaction interfaces (Cancel, SetOption, ...) that where only exposed by the concrete implementation of FdbTransaction.
- Added "Snapshot" property on IFdbReadOnlyTransaction that return a Snapshotted instance, or the transaction itself if is already snapshotted
- Removed ToSnapshotTransaction() extension method that is not needed anymore.
- Renamed EnsureCanReadOrWrite() to EnsureCanWrite()
- Changed EnsureCanWrite(..) to allow being called from the network thread (even though it is not always a good idea).
- Fixed an invalid cast in FdbOperationContext.Execute when passed a Func<IFdbReadOnlyTransaction, Task> delegate
Added transactional overrides that take an "onDone" callback [Work in Progress]

- Called only once, with the transaction that committed with success
- Can be used to call GetCommittedVersion(..)
- Can also be used to publish changes to the global state of the application.
Updated the Message Queue layer following the recent changes

- only change the global state when the ReadWriteAsync succeeds
- FindRandomItem performs the two reads in parallel, and return the resulting key/value pair
- Clear the previous completed task, and read the task body inside the same transaction, to reduce latency
- Work in Progress! (probably broken)
Added Timeout and RetryLimit properties on the transaction interface and moved the WithXXX() transaction setters to extension methods.
Renamed most "ct" argument names in the Core API into "cancellationToken" to align with BCL naming conventions.
Updated code to use either IFdbDatabase or IFdbTransactional + renamed "Db" properties to "Database"