Fix Transaction memory management

Use reference counting to ensure that Transaction objects
are not deleted while they are still in use.
Use Async::Callback in btree

See issue #7
Fix serious bug in Async::Callback

Async::Callback did not correctly return the return value
First implementation of multi-version storage

See issue #5. Rewrite of FlexStorage that allows to
store multiple versions of each documents.

NOTE: This commit breaks the test-modifiy unit test!

TODO: Handle document modification in FlexStorage
and introduce multi-versioning to the other parts of the code base.
Implement Btree::FindClosure::FindPrev
Introduce SequenceIds

A SequenceId is a unique id number assigned to each
commited transaction. SequenceIds are used to keep track of when
changes to the database happen; they are always increasing
so they can be used to check which version of a document is newer.
You can think of them as "revision ids".

This is part of a solution to issue #5.
Fix document modification

Document modification was broken while issue #5 was
being implemented. This is the last major update required
for issue #5.