Interner that checks for duplicates and will only intern a given string once.
Using the lasso/rodeo hack for packed maps.
First param (“Key”) is the id and must be big enough to fit total items;
Second param (“Idx”) is an index into the string and must be greater than string len.
An interner that has been frozen and does not allow adding new strings.
We freeze it by discarding the string-to-key mapping, so we can’t look up
ids for strings anymore either.