Proper named metadata support

Previously we attempted to treat named data the same as "numbered"
metadata. In fact, the two are different and require different syntax.
Rename what we previously called named metadata to "numbered metadata"
and add specific functions for dealing with named metadata

As a test have the compiler emit !llvm.ident metadata with a fixed
identifier string for llambda. More named metadata will be needed in the
future for debugging support.
llvmir: Add IrFunctionBuilder.withMetadata

This allows metadata to be applied over multiple instructions without
explicitly passing it in. This is intended to ease adding source-level
debugging metadata without passing in location information to every IR
writer.
llvmir: Catch adding instrs to terminated blocks

Now that we have addInstruction() it's easy to check if we're adding to
a terminated block. This will fail at LLVM IR compile time but it's
preferable to catch this in Scala so we can get a proper backtrace.
compiler: Move StableIrSuite to the codegen tests

What it's testing is strictly a property of codegen. Group it will all
the other codegen unit tests.
compiler: Plan lambdas returning %unit* as void

There was code attempting to detect %unit* returning functions and
convert them to returning void. However, due to some tricky type
inferrence  on the Scala side the test was always false. Fix the test
and add a unit test.
compiler: Initial support for source located Steps

- Make ps.Step source located and update its renamed() implementations
  to preserve source location

- Factor out the code for referencing the Life R7RS example in to
  testutil.NonTrivialProgram

- Write a unit test that ensures everything except for some specific
  compiler-internal steps are source located

- Add PlanWriter.withSourceLocation helper to set the source location
  for a plan writer. this will automatically locate any steps inside the
  passed block with the given location

- Remove the LocateExceptionsWith infrastructure and use
  PlanWriter.activeSourceLocated instead

- Change ModuleBodyExtractor to properly locate et.Lambda. This is
  required to properly locate the closure-generating code in the parent
  plan.

- Improve the frontend and reducer to better preserve source locations

- Track which lambda/procedures are artificial so they can be marked as
  such in the debug metadata
compiler: Remove unused methods

SourceLocation.positionString and SchemeParser.located are both unusdd
compiler: Properly located nested data

The Scheme parser was using a single private var to track the start
location of the current datum. However, any nested data would overwrite
the location by the time the data was finished parsing. This moved our
source locations "later" in the input than they should be.

Fix by passing the source location on the value stack. This is cleaner
and more functional anyway.
compiler: Get rid of Scheme identifier regex

The regex was a legacy of the old parser which required it for actual
parsing. It was still used to check for valid identifiers when printing
ASTs so it was retained after the parser rewrite. However, it's much
cleaner and likely faster to just run our parser on the identifier and
see if it parses as a symbol.
Update to ScalaTest 2.2.0

This required getting rid of a stale parser combinator import in
ExprLocatingSuite
compiler: Fix deadlock on startup

By default Scala objects are initialised lazily. This presented a
problem for ct.CellType because the type objects referenced both their
subtypes and supertype. If two threads initialised different CellType
instances it's possible for the threads to deadlock waiting for each
other's CellType instances to initalise

Fix this by getting rid of ct.CellType.supertype completely - we can
just as easily work with just the subtypes. This means the lazy
initialisation always happens in a single direction from superclass =>
subclass regardless of which type is entered first

This fixes a fairly frequent hang in the compiler's test suite