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.
Merge remote-tracking branch upstream/$:{upbranch}