[BREAKING] Big API refactoring (tr.Snapshot, db.Attempt, ...)

- Added IFdbTransaction and IFdbReadTransaction interfaces. The latter only holds "read" methods and the former have both "read" and "write" methods
- trans.Snapshot returns an IFdbReadTransaction that will pass "snapshot=true" to all native methods
- Moved the AttemptXXX() methods to an inner class, and split into Read only and Read/Write methods
- Overrides of db.Attempt.ReadXXX() will get an IFdbReadTransaction and can only read the db
- Overrides of db.Attempt.ChangeXXX() will get an IFdbTransaction and can read/modify the db
- Overrides of db.Attempt.Snapshot.ReadXXX() will get an IFdbReadTransaction in snapshot mode
- Added FdbTransaction.GetRangeAsync() that returns an FdbRangeChunk, to be able to directly call fdb_transaction_get_range without using iterators
- Made FdbArray<T> and FdbTable<K, V> use a regular FdbArray and FdbTable under the hood (less code duplication)
- Added missing DebuggerDisplay attributes on lots of classes
- Replace old bugs with fresh new ones :)