Add the concept of a "Unit".

A Unit is a subprogram of some kind e.g. a function or the initialization
code for a module. In practice this just means a container for shipping
around a control flow graph along with its associated symbol table and
a placeholder for a description of its parameters, which will be filled
out once we implement the instantiation of function templates.
More work-in-progress analyzer (now called "preprocessor") work.

This is not a working state: the main analysis functions still need to be
moved from "analyzer" into the preprocessor.Executor class, as indicated
in the TODO comment inline.