Expose parseWithTokenizer in the interface.

This allows callers to use tokenizers other than the PKTokenizer instances
that parseString and parseStream create.
Don't set PKTokenizer.string = nil at the end of the parse.

The setter for that field will assert PKTokenizer.stream is nil, which of
course is not true if you're parsing a stream rather than a string.
Add a command-line system to ParserGenApp.

This extends ParserGenApp so that it can be run with command line arguments,
in which case it does not show the configuration window, but it just runs the
parser generator instead.

This moves some of the generation code out of PGDocument and into a new
PGGenerator.  (It gets ARCified and tidied up at the same time.)