Add parentheticals to the language [ply]

The grammar here is pretty straightforward; an expression can now be an
otherwise-valid expression surrounded by parentheses.

You'll notice that we had to hack in parse-error expressions. By
default, PLY prints parse errors to STDOUT and returns None. That's not
very useful in any context I can think of. Instead, we inject a logger
that blackholes all input except calls to error(); calls to error()
raise a ParseError. It's pretty kludgey, but as the tests show, it at
least works.
Allow arbitrary whitespace in our language [ply]

PLY looks for a t_ignore rule; characters in this rule will be skipped
over during lexing. Note that unlike the other rules, t_ignore is a list
of characters, not a regex; simply replacing our ' \t' rule with r'\s'
would not work.