Merge crash recovery branch

Simplify crash recovery to make it more robust: instead of tracking every small change to the core btrees, we can rebuild the inner b+-tree pages by scanning through leaf pages after a crash. Benefit: during normal operations, only modifications to leaf pages have to be recorded in the transaction log, resulting in smaller log files. During recovery, less operations have to be redone/rolled back, which greatly reduces the risk of conflicts. When rebuilding the btrees we can better handle inconsistencies.

The recovery branch has been tested since two months by several users and has been quite reliable. We've been able to recover from most crash situations (sudden death, deadlocks) which were fatal using the old code.