"parser" now evaluates '*' pseudo-op

At this point I am planning to develop parser into an
independent, full rewrite of the assembler. It's simply
too difficult to try to make large refactorings to asm itself
while still being able to self-compile.
parser tracks pass, prints (empty) vtable
Parser now supports set_var, print_vtable
"parser" can now assemble examples

We're in a transition state to a new syntax. The new parser
supports a proper distinction between labels, opcodes, and operands.

The parser is written to the old syntax, so it cannot (yet) compile
itself. So the build chain is temporarily as follows:

As always, asm can compile itself from asm.asm.

Use asm to compile parser.asm, generating parser.img.

Use parser.img to compile the examples.

Because of the syntax changes, asm can no longer compile the examples.

The syntax changes are as follows:

- Opcodes and operands must be separated by a space.

- You cannot have an operand without an opcode. This breaks string
literals and hex code literals when used to simply define data
structures. For now, the "_" pseudo-op serves as an empty opcode.
Eventually we will define "DS", "DB", and other such data
allocation pseudo-ops to support these.
Promote new 'parser' to be our new assembler