DBs are accessible through transaction

Previous implementation has following drawbacks:
- it required a lot of boilerplate to transfer db into a function as
  it also required sending transaction
- databases had to be created before creating writing transaction as
  in other case they were blocked. It caused db creation to happen
  in the top block and was not documented at all
- db access functions have additional parameter - transaction - which
  didn't allow to create easily accessible indexes

Current approach represents database as a tuple of db handle and
transaction. So database has sense only while parent transaction is
alive. Which makes perfect sense.

Databases are created in transaction itself (if it is writable) so there
is no need to create them before usage.

Also it is a preliminary step for implementing indexing traits to
get/set values, which should make it much more readable.

This commit doesn't provide all the functionality rather starts a
foundation for further work and full elimination of unsafe blocks.
Added FIXMEs
Clean up: NativeTransaction becomes stealth, conversion traits deleted
Do not create db from read only transactions
Safer env access from Transaction

I'm not sure if that borrowing will be too restrictive on
a real-life project
Dropping DB from cache if it was deleted in transaction
Database is always non-owned now
Better DB creation

1. Using a fast child transaction, see comments in code why
3. empty name and null name are different for LMDB, so instead of bubbling
   up option use empty string as distinction
Minor fixes
Marking NativeTransaction as NoCopy and NoSync
Untie set/del from NativeTransaction lifetime
Implement Error trait for MdbError
Renamed MdbError variant Custom -> Other
Update to nightly: enum fallout + borrow in collections
DbHandle to allow caching
Updated to latest Rust
bitflags! now has Copy automatically
Traits reform
Correct pointing cursor to exact item
Load only key while checking for key validity