Consistent source location transfer with Patch

I’ve been working on Twines, it’s tricky to integrate. Here’s a rough demo before I started weighing the interface down by integrating into Yosys:

That’s also before I switched TwineRef pointers to indexing with integers, which required me to fork the backing plf::colony allocator

The TwineRef don’t live in a name field of named objects, but in a metadata block outside of the object. However a name field is provided for compat: [[no_unique_address]] RTLIL::CellNameMasq name;

This field should be able to materialize escaped or unescaped strings as needed. I can’t have unescape return a string_view since the whole point of twines is that you don’t hold the string in contigous memory. This is why it’s also a great time to throw out private/public name distinction from strings and instead push it into the metadata block. Prior discussion:

So far, I also see this is as a parallelization win, as interning twines on per-design pools will be possible from multiple threads working on different designs. Also, Patch doesn’t intern strings into the design pool, it keeps twines uninterned in a local temporary pool, which interns its contents into the design pool only when the Patch is applied. This means it should be possible to prepare Patches in parallel, too!