Wrote notes on LEXICAL CATEGORIES in the comments.

None of this lexical category BS has been implemented yet, but I'm writing notes
on it here in this commit message.

To make the system more flexible, I need the grammar to recognize lexical
categories, which will simply have functions identifying whether terminal
symbols qualify. Every terminal symbol will simply be "tried" with all of the
lexical categories. This will allow abstraction beyond the current method, which
just assumes I only want lone terminals and open categories (e.g., Word).

Implementing lexical categories as functions over terminals is not just an
optimization to avoid large sets of strings everywhere: in fact, I fully expect
there to be large sets of strings in lexical categories. But it's slightly more
general, and allows for *infinite sets* of strings. Indeed, you could implement
a lexical category that uses an internal grammar to judge whether a terminal is
a member! (Dualist syntax, anyone?)

Fortunately, this future change shouldn't change any backwards compatibility.
Also fortunately, I'm the only one using this package so who cares?