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.
I think that it would be better to save state of `trailer` as a local variable instead of `buffer.resetReaderIndex()` and read it again and again. Something like this:
``` java
LastHttpContent trailer = this.trailer;
if (trailer == null) {
    trailer = new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER, validateHeaders);
}
do {
...
    line = headerParser.parse(buffer);
    if (line == null) {
        return null;
    }
} while (line.length() > 0);

this.trailer = null;
return trailer;
```
Don't forget set `this.trailer == null;` in `resetNow()` and `invalidChunk(Exception)` methods.