Implements commit log compression.

Provides two implementations of commit log segments, one matching the
previous memory-mapped writing method for uncompressed logs and one
that uses in-memory buffers and compresses sections between sync markers
before writing to the log. Replay is changed to decompresses these sections
and keep track of the uncompressed position to correctly identify the replay
position.

The compression class and parameters are specified in cassandra.yaml and
stored in the commit log descriptor, which can now vary in size.

Tested by the test-compression target, which now enables LZ4Compression
of commit logs in addition to compression for SSTables.