Add predicate for block-introducing statement symbols
Add label slot to statement structure

Yes, I know, this should really be on the statement-block structure, but the label is introduced with the statement that introducs the block, not the block body.

Pathological case:
foo:
do.

This way, the above parses as a labeled statement "DO", which the compiler can deal with, rather than having no block to associate the label with.
Add rule to match block-introducing symbols
Simplify end-statement predicate
Add support for labeled block statements
Add a meta-sexp transform to commit the current checkpoint
Parse both left and right brackets/parens in the expression rule, not the sub-list rules
Treat END statements as a tail on the outer statement.
Remove debugging test rule
Treat any statement beginning with END as an end statement.

This is necessary to accomodate options that might follow the actual end phrase (e.g. NO-LOCK, NO-LOBS etc.)
Don't return a comment object from the comment-reader.

Returning no values tells the parse-object rule to retry reading an object, but the rule still slurps up the comment.
Give all AST structs a common super-struct
Add support for blocks that don't begin with a colon-terminator.

Any block that might begin with a colon-terminator can also just start with a header statement (followed by a dot-terminator). These will be parsed as a regular statement sequence, and we'll fix it up later.
Remove unused structs
Make char-range available to deftypes
Use meta-sexp's DIGIT? type
Fix function name
Add package qualifier for util function
Add slurp-file util
Move slurp-file util to vertigo's util file