I don't like making huge commits, but...

There's just not a lot of ways to break this up.

1. All values held by the VM are now doubles, which are casted to 32-bit
    integers as needed. There is one exception to this with the integer
    division instruction, where 64-bit signed integers are used because
    the result must necessarily be representable by a double.
2. Instruction set is extremely reduced as a result of this. There were
    about 113 instructions. That's down to 48.
    - Almost all typed instructions are gone. IDIV and IMOD are mostly
        the only exceptions, as there are specific advantages to integer
        division and modulo, and using fmod all the time isn't really
        necessary anyway.
    - All literal instructions are removed. In their place, most
        instructions now take an extra litflag argument that allows you
        to specify which arguments are literals. Not all arguments can
        be literals. Which arguments can be literals is currently
        documented per-instruction or per-group-of-instructions inline
        in vm_state_t::exec's opcode switch.

Because of these changes, the VM will not load existing bytecode. Both
asm2bc and vm_source need to be updated appropriately, as the changes
make it necessary to fix a lot of stuff.
Note about the type used for CMP.
Allow literals on both sides of arith/bitwise instructions.

Also fixes a handful of instructions that weren't using the correct
operand (reading from and writing to what was specified by op 0).