Implemented LZ4 compression codec (block mode)

Motivation:

LZ4 compression codec provides sending and receiving data encoded by very fast LZ4 algorithm using block mode.

Modifications:

- Added `lz4` library which implements LZ4 algorithm.
- Implemented `Lz4FramedEncoder` which extends `MessageToByteEncoder` and provides compression of outgoing messages.
- Added tests to verify the `Lz4FramedEncoder` and how it can compress data for the next uncompression using the original library.
- Implemented `Lz4FramedDecoder` which extends `ByteToMessageDecoder` and provides uncompression of incoming messages.
- Added tests to verify the `Lz4FramedDecoder` and how it can uncompress data after compression using the original library.
- Added integration tests for `Lz4FramedEncoder/Decoder`.

Result:

Full LZ4 compression codec which can compress/uncompress data using LZ4 algorithm.

See also issue #81
If `in.hasArray()` returns `true`, you could compare directly without making any copies.
If `in.hasArray()` returns `false`, you can compare the magic bytes using `in.forEachBytes()`.  The `ByteBufProcessor` could be lazily instantiated and be kept as a member field for reuse.