You can now have an extractor object that keeps different steps of the extraction in memory.

The upside is, it's lazy loaded, meaning no CPU consumption upon immediate creation.
It also only extracts what it needs, nothing more.

Downside is there is a bunch of strings that are gonna live in memory for the lifetime of the object,
depending on what you decided to extract. I have zero idea how big that could be, but it could be
pretty big, I guess.

Sidenode, one should refrain from passing in this thing anything with a circular reference.
There's no detection for that yet.