lib.rs: add `pub` in a few places
Build a table of state indices before execution

This cuts the execution time by roughly half the number of states.
(I should really add benchmarks)

I tried to declare `state` as Option<&State>, but then could not implement
resolve_all_state_indices in a way that the borrow checker accepted.
Implement most of the compiler and runtime library

A few things are still missing:
- A proper command line interface. Currently you can only hard-code your TM in
  the source code, and the generated module will be dumped to stdout.
- turingc should automatically link the target against the runtime library.
- Proper handling of the blank symbol. Unused parts of the tape are filled
  with zeroes, but the compiler doesn't treat the blank symbol (which may be
  'B' in a particular TM description file, or anything else) specially.
- Don't output internal states. This requires marking internal (non-input/
  output) states as such, in TMDesc.
- Output isn't yet implemented in libturingrt!

I'm not particularly happy with the LLVM wrapper. It has a mostly
nice-and-rusty API (which includes being somewhat object oriented),
but lifetimes and mutability are wrong in a few places. Ideally I would
like to recreate the C++ API in Rust (and have it ship as a separate
crate).