Rewrite the assembler.

Add a full parser, in src/parser.lisp, which handles comments, labels,
compile-tile expressions, decimal literals, and all the features of the
previous assembler. The new assembler uses a different intermediary format,
described in src/assemble.lisp, which removes the need to use special
characters in operands to specify addressing modes.

Add enviroments to the assembler so that labels can be used. Forward labels
are implemented using delayed functions while assembling. An initial
environment can be passed to the assembler as a hash table.

Operands can be decimal literals in addition to hexidecimal literals.
Compile-tile expressions can also be used, by adding a literal to a label.
Branches to absolute addresses will be assembled as zero-page if possible.