Better LLVM builder interface.

The raw LLVM "Builder" interface only knows how to make instructions, but
our code generator methods need to be able to make other things like types
and global variables.

To avoid having to import llvm.core all over the place, we wrap up a bunch
of different llvm.core interfaces into a wrapper class whose instances
we can pass to the code generator methods. This will make it possible to
mock out LLVM functionality when testing, if desired, as well as avoiding
the namespace pollution of importing llvm.core's symbols into other
modules.

As part of this we bundle up a bunch of constants in the llvm.core module
into enum classes rather than using them in a big flat namespace with
name prefixes.
In alac, print LLVM IR before optimization.

While we're still debugging this is more useful.