During the generation of a bytecode sequence, specific instantiations may need to be made, that
may not yet exist in the underlying module. Instead of mutating the underlying module in order to record these instantiations in the
locals signature table, we instead build wrapper around the underlying module containing the
type instantiations, and at the end materialize this updated signature pool into a module. We
also need the ability to quickly determine if an instantiation has already been created, and if
so, at which index. So this also keeps a reverse lookup table of instantiation to
SignatureIndex.