Rename CodecOutput to RecyclableArrayList and move it to internal package.

* Also reuse it in SslHandler
Adjust ChannelGroup to behave the same like a Channel in terms of write and flush
Allow per-write promises and disallow promises on flush()

- write() now accepts a ChannelPromise and returns ChannelFuture as most
  users expected.  It makes the user's life much easier because it is
  now much easier to get notified when a specific message has been
  written.
- flush() does not create a ChannelPromise nor returns ChannelFuture.
  It is now similar to what read() looks like.
Fix a bug in ChannelOutboundBuffer.addFlush()

It should not advance the tail if no write() was issued so far.
Fix potential leak in HttpContentEncoder