The allocation of a global symbol. This is shared between threads, so the
interned value of a symbol will be the same location no matter which thread
interned it. Functions are safe to share between threads because they are
marked immutable by
SymbolMap::set_func and they
can only be replaced atomically. In order to garbage collect the function we
need to halt all running threads. This has not been implemented yet.
When copying uninterned symbols, we need to ensure that all instances share
the same address if they did originally. This keeps a mapping from old
symbols to new.