Was confusing having numbers without an explicit base sometimes be hex
and sometimes not, based on their metadata.
By convention I don't bother with the '0x' for instructions, or for
single-digit numbers that are equal to their decimal representation. But
I could and it would still work.
Reorganize layers to introduce the translation workflow right at the start.
We also avoid duplicating parsing code. Programs are always parsed into
the `program` data structure.