New library for interned strings.
An "interned" string is stored in a global hash table. Only one copy of any
given string is kept in the hash table, which reduces memory usage in cases
where there might otherwise be many duplicates of a given string.
Interned strings can be compared for equality by comparing pointers, which
can also be a significant advantage in some cases.
Interned strings are immutable.
This commit adds a general-purpose implementation of interned strings and
adapts the implementation of value labels, which already had a
special-purpose and less convenient implementation of interned strings,
to use them.