HTTP/2 Write Compression Support

Motivation:
The HTTP/2 codec does not supply an interface which facilitates doing data write compression.
Compressing data is anticipated to be a common use case and this feature is thus anticipated to be useful.

Modifications:
-Restructure the AbstractHttp2ConnectionHandler class to be able to extend write behavior before the outbound flow control gets the data
-Add classes which override the newly restructured interfaces to provide an extensible compression interface
-Add unit tests to test the new capability

Result:
HTTP/2 codec provides an interface (and default implementation) for data write compression.
>Of course on the reading side we also have listeners but that is where the symmetry between reading and writing breaks down a bit

This is exactly what I was struggling with.  Trying to keep symmetry between `Http*Reader` is to `Http*Listener` as `Http*Writer` is to `Http*Producer`.

The `Http*Writer` class also extends some other interfaces that are outside of the `Http*Producer` responsibilities.  The goal (may be confusing in the current state) was to keep the `Http*Producer` just having application concepts like `writeData` and not having lower level methods (close, header frame table sizes, etc...).  Note the frame writer interface:

`public interface Http2FrameWriter extends Http2FrameProducer, Http2FrameHeaderTable, Closeable`