Rewrote project.

The parser and compiler are now separate. The new parser is
significantly faster than the old one, and the compiler produces more
efficient code at the expense of some clarity and simplicity of
implementation.

This also fixes a bug introduced by commit 0ec483 wherein an attribute
with no value followed by a newline would be treated as a tag name.