Use std::unique_ptr in Block, and modify semantics of BlockContents

The semantics of BlockContents has been changed slightly to better follow C++
move semantics. Its purpose is now limited to acting as a structure used to
construct a Block object instead of passing a large number of parameters around.

When a Block is created, it takes ownership of the given BlockContents object,
and implicitly the underlying char[] buffer through use of std::unique_ptr.