Fix BlockingQueue<T> for non-copyable types

Only use move in the implementation
Build chunk index from chunk data to avoid dependency on file data

This will help in moving index building and compression to a thread pool.
Streamline chunk writing logic and prepare for threaded build

This requires passing the ownership of existing chunk data from update to build
since the chunks will be written from a separate thread.
Minor builder implementation refactoring
Implement multi-threaded building

A worker queue is used to build chunk index and compress chunk data;
a specialized consumer thread sorts and outputs chunks to output stream.

This results in 4x speedup for building 500Mb dataset from scratch.
Add debug information to Makefile
Add clarification comment and an assertion