Abstract storage engines

This pr create a storage engine interface and modify shards to use the
interface instead. It also adds a B-Tree implementation and benchmark
tool to compare the performance of the different storage engines.