Manage the reference set better.

HPACK relies on streaming decoding. This means that things may be
added to the header table and then removed from it in the same
header block. When things are removed from the header table, they
should also be removed from the reference set.

The combination of these two facts means that we cannot rely on
the reference set containing all headers emitted during processing
of the current header block. We need to more aggressively return
headers from our processing functions, and rely on the set logic
to prevent us duplicating them.

This causes all current HPACK decoder integration tests to pass.

There is a similar set of changes required for the HPACK encoder,
but we'll wait until we have a good set of encoder integration
tests first.