Separates parsing concerns.
PARSE does the parsing; WORD returns words.
Random strings don't belong on the stack.
Recursive defs no longer depend on kludge.
Reuse rather than reinvent WORD in COMPILE-AST.
DEFINE word looks for optional single-quoted designator.
Doublequotes should be for strings, probably.
Quoting is necessary in the case where a word is already defined, and
we don't want to execute it incidentally while trying to define it.
WORDS may no longer return NIL.
That is, if the dictionary contains nil (it's unclear why it would,
yet it happens anyway) we filter those NILs out of the collection.
UNDEFINE uses REMHASH instead of setf-gethash nil.
AUTOCOMPLETE uses an ECASE instead of a CASE.