Stub out the model for a new intermediate representation.

Executing and processing the AST through the whole stack is proving
awkward and redundant, so this is the first step towards a new model where
we quickly move to a three-address code that we can break up into
basic blocks and do traditional analyses on.
Work-in-progress intermediate code generator.

Still lots of work to do to replace all of the execute/evaluate functions
from the old model with the make_intermediate_form method instead.
Arguments a first-class AST node type, and intermediate code generation for calls.
Intermediate code generation for IfStmt
Fix infinite loop when looking up a symbol.
Intermediate code generation for WhileStmt.
Intermediate code generation for function declarations.
C code generation for some of the intermediate representation classes.
Simplify temporaries in our generated intermediate code.

Due to how expressions are turned into intermediate code (each one
produces a temporary that it leaves its result in) we get left with a lot
of temporaries that aren't really necessary. This post-processing step
removes the most obvious of these, leaving us with fewer unneeded
temporaries along with fewer intermediate code elements.
Add a simple LinkedList utility.

This will be a building block for making lists of intermediate code
elements that can easily be manipulated by optimization passes. In
particular, we can insert, remove and replace list items in constant time
which will be particularly useful for shuffling around code fragments.
Beginnings of building a control flow graph.
Find dominators in the control flow graph.
Catch up some code style fixes.
Update the call expr parsing tests.

As part of the refactoring to support an intermediate representation the
AST model of a call was changed to support both positional and named
arguments, so this catches up the parser tests to match with the new
model.
Remove the defunct AST-oriented execute/codegen tests.

We're no longer doing execution or codegen against the AST, but instead
the intermediate form. Therefore all of the AST execute/evaluate/generate
functions are now defunct, allong with their associated tests.
Skip some type tests until they're updated to not work on ASTs.
Fix the style of the temporary CFG visualizing code.
Remove the alamatic.interpreter module.

This will probably come back in a new form soon, but this model of
executing the AST is now defunct so we're going to start from a clean
slate and implement a simpler interpreter that works in terms of the
intermediate language instead.
Simplify the testutil AST nodes.

Now that the AST doesn't get executed, fewer different sorts of dummy
node are needed since these only need to support the tests for generating
intermediate code from an AST.
Test immediate code generation for AssignExpr.