Implement ColumnStoreMerger

The ColumnStoreMerger follows the approach described in section four of the paper 'Fast Lookups for In-Memory Column Stores'. (http://ares.epic.hpi.uni-potsdam.de/apps/static/papers/Fast_Lookups_for_In-Memory_Column_Stores_latest.pdf)

It's main advantage is observable if indices are being used. If a group key index exists on the main partition this index is going to be reused and extended instead of rebuilt from scratch which offers performance improvements.

The ColumnStoreMerger is in general faster than the normal merger in most cases. The other cases are work in progress.

I think a lot of discussion and review will be necessary.
Rather than using `.lock` and `.unlock` explicitly, consider using `lock_guard` instead - if an exception is thrown in the following lines for whatever reason, the lock will not be removed unless it is unlocked at scope exit, which is exactly what `lock_guard` does. (see http://en.cppreference.com/w/cpp/thread/lock_guard)