This class works hand-in-hand with H2Connection.
It acts to provide an implementation of ITransport,
IConsumer,
and IProducer
that work for a single HTTP/2 connection, while tightly cleaving to the
interface provided by those interfaces. It does this by having a tight
coupling to H2Connection,
which allows associating many of the functions of ITransport,
IConsumer,
and IProducer
to objects on a stream-specific level.

Called when the connection has received a chunk of data from the
underlying transport. If the stream has been registered with a consumer,
and is currently able to push data, immediately passes it through.
Otherwise, buffers the chunk until we can start producing.

Called by the H2Connection
when the all data for a request has been received. Currently, with the
legacy twisted.web.http.Request
object, just calls requestReceived unless the producer wants us to be
quiet.

This sets self to be a consumer for a producer. When this object runs
out of data (as when a send(2) call on a socket succeeds in moving the last
data from a userspace buffer into a kernelspace buffer), it will ask the
producer to resumeProducing().

For IPullProducer
providers, resumeProducing will be called once each time data
is required.

For IPushProducer
providers, pauseProducing will be called whenever the write
buffer fills up and resumeProducing will only be called when
it empties.