Attempt to make copying into `Stream`s more lazy
Spicy-generated parser operate on Streams, so in order to parse anything we always need to append input data to the Stream a parser operates on. Streams consist of Chunks which own their data, so this always involves a deep copy of the data.
This PR attempts to make this more lazy to explore whether we can get rid of associated overhead. For that I introduced a Chunk behavior where it does not own the data; to make this safe (e.g., since the input data might at some point disappear) users of this API need to explicitly make such Chunks owning before their data goes out of scope. For now I encapsulated this in a RAII class which performs this operation when it goes out of scope.
Benchmarking this with a large internal parser the changes here actually make performance worse (by about (3.5±1.2)%), so I am opening this more for reference. The added overhead seems to be due to many Chunk methods now having to also check whether a Chunk is not owning (previously: only check for gap chunk or not); it probably is worthwhile checking whether e.g., introducing dedicated Chunk classes for owning, non-owning, and gaps perform any better.