Update the assembler a bit.

- Access to registers is marked in the parser by a RegisterRef.

- If an instruction has a litflag and the litflag isn't provided, the
  assembler will attempt to determine which things are literals. This
  means bare numbers are no longer implicitly registers.

- To specify a 0-based register, use %N, otherwise continue using $N
  since there's very little chance you'll ever want to specify %0
  through %3.

- If --print-instrs is specified (before the output file and input
  file[s]), the assembler will print out what it read and basically
  show how it's treating the input.

- If no prefix is given, a UUID is generated for a unit.

- Fixed some bugs with data statements and literals. A literal now
  implicitly generates a defdata statement if and only if the string
  literal doesn't match an existing literal. This is to reduce bytecode
  size, since data strings are marked read-only in the VM anyway.
  String data is made unique across units, but this process only works
  if units are combined in the same run of the parser.

- Unit digests are currently unused to test out the uuid stuff. They'll
  likely be back later, but for now, I need to see if it breaks stuff,
  and the best way to do that is to simply let it do its thing.
Errors/warnings.

The error method can now optionally emit messages in addition to its
default message.