Abstract storage engines

This commit create a storage engine interface and modify shards to use
interface instead. It also adds a B-Tree implementation and benchmark
tool to compare the performance of the different storage engines.
Make the storage engine selectable from the config file
Remove LevelDb from the shard and the shard data store
keep track of the database type
Add support for rocksdb
Add support for hyperleveldb
fix the timing of the second write
Don't close the cache which could still be used
fix the directory
Make rocksdb optional, since we can't build it on travis
Merge branch 'b-tree'

This branch includes the following work:

- Abstraction of the storage engine
- HyperLevelDB, RocksDB and LMDB implementations
- Storage benchmarking tool