Rewrite HttpObjectDecoder to use ByteToMessageDecoder

Motivation:
HttpObjectDecoders uses ReplayingDecoder which is slow compared to ByteToMessageDecoder because it needs a lot more range checks and also throws a Signal very often.

Modifications:
 - Rewrite HttpObjectDecoder to use ByteToMessageDecoder
 - Not parse headers multiple times
 - Simplify the code

Result:
Performance improvements.
To avoid too many checks inside `buffer.readUnsignedByte()`, updates of `readerIndex` and casts `byte -> short -> char -> int` it may be simlified as:
``` java
private static boolean skipControlCharacters(ByteBuf buffer) {
    boolean skiped = false;
    final int wIdx = buffer.writerIndex();
    int rIdx = buffer.readerIndex();
    while (wIdx > rIdx) {
        int c = buffer.getUnsignedByte(rIdx++);
        if (!Character.isISOControl(c) && !Character.isWhitespace(c)) {
            rIdx--;
            skiped = true;
            break;
        }
    }
    buffer.readerIndex(rIdx);
    return skiped;
}
```