Add an explicit test for symbol expressions.

Previously these were only being tested implicitly as part of the
expression statement test.
Refactor how we handle compile-time logging.

Rather than forcing the log lines to be buffered in memory, allow the
caller to decide how log lines will be handled. The default is to
do nothing, but other alternatives built so far include logging to
Python's logging module and logging to an in-memory array, both of which
are useful in tests, for testing successes and failures respectively.

Before to long there will certainly be one of these for logging to the
console, but that's not here yet.
Abbreviate Statement and Expression in the AST class names.

It's getting really verbose out there, so let's abbreviate these to reduce
the amount of noise in the code.