Implemented a Bzip2Encoder

Motivation:

Bzip2Encoder provides sending data compressed in bzip2 format.

Modifications:

Added classes:
- Bzip2Encoder
- Bzip2BitWriter
- Bzip2BlockCompressor
- Bzip2DivSufSort
- Bzip2HuffmanAllocator
- Bzip2HuffmanStageEncoder
- Bzip2MTFAndRLE2StageEncoder
- Bzip2EncoderTest

Modified classes:
- Bzip2Constants (splited BLOCK_HEADER_MAGIC and END_OF_STREAM_MAGIC)
- Bzip2Decoder (use splited magic numbers)

Result:

Implemented new encoder which can compress outgoing data in bzip2 format.

@trustin @normanmaurer
Please, review. 
Right

> Am 06.07.2014 um 23:56 schrieb Idel Pivnitskiy <notifications@github.com>:
> 
> In codec/src/main/java/io/netty/handler/codec/compression/Bzip2Encoder.java:
> 
> > +    /**
> > +     * Creates a new bzip2 encoder with the maximum (900,000 byte) block size.
> > +     */
> > +    public Bzip2Encoder() {
> > +        this(MAX_BLOCK_SIZE);
> > +    }
> > +
> > +    /**
> > +     * Creates a new bzip2 encoder with the specified {@code blockSizeMultiplier}.
> > +     * @param blockSizeMultiplier
> > +     *        The Bzip2 block size as a multiple of 100,000 bytes (minimum {@code 1}, maximum {@code 9}).
> > +     *        Larger block sizes require more memory for both compression and decompression,
> > +     *        but give better compression ratios. {@code 9} will usually be the best value to use.
> > +     */
> > +    public Bzip2Encoder(final int blockSizeMultiplier) {
> > +        if (blockSizeMultiplier < MIN_BLOCK_SIZE || blockSizeMultiplier > MAX_BLOCK_SIZE) {
> I think that I need to add super(false) here. So it will allocate a heap ByteBuf, which is backed by an byte array. Is it right?
> 
> —
> Reply to this email directly or view it on GitHub.