Add a string heap partition and route long AK string backing
allocations through it.
Give StringBuilder partition-aware outlined storage so adopted String
and Utf16String buffers are allocated from the string heap. Keep the
string heap thread-local because mimalloc heaps may only allocate from
their creating thread, while cross-thread frees are handled by mimalloc.
Replace the lazy heap allocation with a constinit static that is
initialized at compile time. This eliminates both the heap allocation
and the runtime guard variable check on every access.
The EmptyByteStringImpl struct mirrors the exact layout of
ByteStringImpl and is verified with static_asserts.