[#2812] Ensure we call checkForSharableAnnotation in all constructors of ByteToMessageCodec

Motivation:

ByteToMessageCodec miss to check for @Sharable annotation in one of its constructors.

Modifications:

Ensure we call checkForSharableAnnotation in all constructors.

Result:

After your change, what will change.
Move duplicated code into CodecUtil

Motivation:

We have some duplicated code that can be reused.

Modifications:

Create package private class called CodecUtil that now contains the shared code / helper method.

Result:

Less code-duplication
Add BufferedMessageToByteEncoder to optimize encoding of protocols that support PIPELINING

Motivation:

We currently have no encoder which helps to optimize for protocols that support PIPELINING.

Modification:

- Introduce BufferedMessageToByteEncoder
- Make use of it HttpObjectEncoder and so all its sub-classes

Result:

Much better performance. Following a benchmark done with HTTP PIPELINING.

Before PR:
[nmaurer@xxx]~% ./wrk-benchmark
Running 2m test @ http://xxx/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.53ms   14.54ms 243.42ms   88.77%
    Req/Sec   196.43k    32.04k  309.84k    75.14%
  373809676 requests in 2.00m, 50.13GB read
Requests/sec: 3115286.79
Transfer/sec:    427.82MB

With PR:
[nmaurer@xxx]~% ./wrk-benchmark
Running 2m test @ http://xxx:8080/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    20.00ms   14.42ms 290.22ms   91.57%
    Req/Sec   208.20k    27.36k  309.20k    72.83%
  396436005 requests in 2.00m, 53.17GB read
Requests/sec: 3303689.70
Transfer/sec:    453.69MB
Make use of CodecUtil