JumpInstruction.build_llvm_terminator implementations.

This will be used during code generation to produce basic block
terminators.
Thread-local context object.

Rather than passing around all of the state info that is effectively
dynamically-scoped during preprocessing, instead we'll keep it in a
thread-local storage and provide a context manager to manage it.

This is a little unusual but it has the advantage that our operand objects
will get to behave like normal objects even though part of their data
comes from locations that vary during processing.
First run at LLVM code generation.

The architecture's still a little odd here but this represents the first
time we've been able to go all the way from Alamatic source to LLVM
assembly, at least for a very contrived program with basic looping and
branching using integers.

Not too happy with how this spread LLVM concepts all over the intermediate
layer, but it'll do for now. Perhaps there will be some refactoring later.
Only show start position in Operand __str__.

Previously we were showing the entire source range, which is a bit verbose
for showing inside reprs and such.
Flesh out the integer type implementation.

Now correctly handles overflow during add, and has a get_llvm_type
implementation that matches the latest interface.