Make ByteBuf an abstract class rather than an interface

- 5% improvement in throughput (HelloWorldServer example)
- Made CompositeByteBuf a concrete class (renamed from DefaultCompositeByteBuf) because there's no multiple inheritance in Java

Before;
```
$ wrk -c 1 -d 10m -t 1 --latency http://127.0.0.1:8080/
Running 10m test @ http://127.0.0.1:8080/
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    22.41us   79.20us   2.45ms   99.18%
    Req/Sec    46.01k   133.78    47.00k    99.15%
  Latency Distribution
     50%   16.00us
     75%   16.00us
     90%   20.00us
     99%   33.00us
  28061000 requests in 10.00m, 2.61GB read
Requests/sec:  46768.34
Transfer/sec:      4.46MB
```

After:
```
$ wrk -c 1 -d 10m -t 1 --latency http://127.0.0.1:8080/
Running 10m test @ http://127.0.0.1:8080/
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    24.09us  108.74us   2.90ms   98.98%
    Req/Sec    48.91k   281.12    50.00k    91.37%
  Latency Distribution
     50%   15.00us
     75%   15.00us
     90%   19.00us
     99%  137.00us
  29479818 requests in 10.00m, 2.75GB read
Requests/sec:  49133.03
Transfer/sec:      4.69MB
```