RulesParser: consistently use kwargs in lieu of kw

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
setup.py: raise an exception if generation will fail due to -OO+ optimization

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
RulesParser: Clean up argument passing mess

Handling, especially, of various **kwargs dicts had become quite unruly
over time, making it pretty difficult to read the code and keep track of
what was going on.  This attempts to sanitize not only the use of kwargs
but several other redundant argument names.  It also gets rid of
convoluted list comprehensions and fixes several places where dicts
passed in as informational arguments to methods were being modified,
without any thought given to how this would affect consumers.

Finally, it drops some unhelpful comments and adds a comment about the
class inheritance path assymetry between NewParser and NewLexer.

Aside from the dict-clobbering bug-fixes, this should be a noop.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
RulesParser: implement lextab handling

This adds handling of lextab that is roughly analogous to what is
already happening with parsetab, both at the NewLexer level and the
Luthor level of inheritance.

One major differece is that, when a lextab module is found within a
package, we have to set optimize=1, if it is to be used.  We only do
this automatically in the case where -OO optimizations are active in
python and therefore we are going to fail unless we resort to it, since
this could make debugging quite difficult otherwise.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>