Eliminate memory copy in ByteToMessageDecoder whenever possible

Motivation:

Currently when there are bytes left in the cumulation buffer we do a byte copy to produce the input buffer for the decode method. This can put quite some overhead on the impl.