428232 - Rework batch mode / buffering in websocket.

Refactored OutgoingFrames.outgoingFrame() to take an additional
parameter, FlushMode. This is in preparation for handling this new
parameter in FrameFlusher.
428232 - Rework batch mode / buffering in websocket.

Refactored FrameFlusher to handle aggregation of frames to support
JSR 356's batch mode.

Now FrameFlusher can aggregate frames as long as the FlushMode they
were sent is AUTO. When a frame that has FlushMode SEND arrives,
it will trigger the flush of the aggregate buffer (and eventually
also other queued frames).
A special BINARY frame is used to implement explicit flush()
invocations.
Avoid boxing of the number of bytes flushed.
428232 - Rework batch mode / buffering in websocket.

Optimized FrameFlusher to not create iterators when iterating over a
list, saving allocation costs.
428232 - Rework batch mode / buffering in websocket.

Better default size for SimpleTextMessage Utf8StringBuilder,
to avoid multiple expansions and data copy of the underlying array.
428232 - Rework batch mode / buffering in websocket.

Avoid to create a new ByteBuffer just to create the mask integer,
saves allocation cost.
428232 - Rework batch mode / buffering in websocket.

Improved logging by wrapping LOG.debug() calls in a
if (LOG.isDebugEnabled()) statement to avoid boxing of primitive
values.
428232 - Rework batch mode / buffering in websocket.

Introduced the automatic batch mode, akin to Jetty 8's WebSocket
implementation.
Now, if there are no more frames to process, and the previous frames
have been aggregated, FrameFlusher auto-flushes the aggregated frames.
This simplifies applications because they don't need to call flush()
explicitly.
Session open and close are now logged at debug level.