Move bytecode literals to the top of a bytecode file
Summary
A bytecode file consists of one or more "compiled code" blocks, each defining its own section of literals. This wastes quite a bit of space when the same literals are repeated in different blocks. Instead of storing literals per block, they should be stored in a module's global scope.
Implementation
bytecode_parser::parse()
will return a type other than a CompiledCode object.
This type just wraps the top-level CompiledCode, along with some additional
information such as the literals. These literals are then later stored in
a GlobalScope, using the same approach as global variables. We then adjust the
SetLiteral instruction to use this new setup.