New concept of a "Program" in the intermediate representation.

This provides the Alamatic IR equivalent of LLVM's "Module": a container
for the globals and functions that will work together to form a complete
program.
Debug printer for IR programs.
Lower entry files to programs rather than just functions.

This gives us a place to put the global variables, allowing them to in
turn be included in the LLVM Module produced by the final lowering step.
Generate a simple "main" function in our LLVM modules.

This makes the program executable, though that doesn't really achieve
anything yet since the program is always empty.