Add support for generating switch instructions

This isn't strictly needed as branches can accomplish the same thing.
However, it can be a lot more concise and understandable in some
situations
Change genTypeCheck to use the switch instruction

This is unlikely to make a performance difference but it causes
significant reduction and simplification in typegen and our generated
Scala and LLVM IR
Add sourceNameHint to to the planner

When setting an immutable variable this is passed in when planning the
inner expression. This is intended to generate sane symbols for
non-anonymous procedures.:
Add test for records with uninitialized fields

This test ensures that the uninitialized fields are set to #!unspecific
SplitRecordType to BoxedRecordType, RecordDataType

vt.RecordDataType is the unboxed version of a record. In signatures this
means its either taking or returning a bare pointer to the record data
itself.

vt.BoxedRecordType is the boxed version of a given record. It's
different from vt.BoxedValue(bt.BoxedRecord) in that it's strongly typed
to a specific record type.
Add planner.SourceNameUniquer

This suffixes source names to make sure they're unique. This is
useful because source names from different scopes can be flattened in to
the same namespace - e.g. multiple record fields can have the same name
and there might be collision in our constructor arguments
Support for planning record procedures

This plans record constructors, predicates, accessors and mutators.
There is no intermediatevalue or codegen support so this is completely
untexted. The only visible result of this is the arity and types of the
procedures are known to the planner so it can catch certain types of
semanitc errors now.
Preserve source location when flattening lambdas
Preserve source location when flattening lambdas
Fix source location for top-level expressions

The ModuleBodyExtractor refactor broke locating top-level exceptions.
Fix and add a very simple unit test to make sure certain expression
types are located correctly.
Merge branch 'master' into recordtypes

Conflicts:
	compiler/src/main/scala/llambda/boxedtype/generated/BoxedType.scala
IntermediateValue support for record types

This completes the planner support for boxed type. It also removes
support for raw record data types as there's no sane way to make
automatic conversion to/from raw data work with the garbage collector.
The current intent is to add an <unmanaged-pointer> type and add
procedures to explicitly convert records to/from unmanaged pointers
Add support for naming IrTypes

This will be used by codegen to give record data types unique LLVM IR
type names
Add boxed record type to ValueTypeToIr

All boxed records use %record* in LLVM IR. Their data will be cast to
teh required type on demand
Fix for constructors with uninitialized fields

The code was assuming all fields were initialized in the same order they
were declared instead of using the intiialized fields list.
Add _lliby_record_data_alloc

This is just a wrapper around malloc(). codegen doesn't use malloc()
directly because we don't have a  mechanism for determining the target
architecture's size_t yet.
Support for inttoptr and ptrtoint

This adds support for inttoptr/ptrtoint both in constant and instruction
form. This will be needed immediately to emulate sizeof() on record data
for allocations and later on for generating type maps.
Automatically escape LLVM IR identifiers

Now that user-provided names are being used it's very easy to break
codegen. Change EscapeIdentifier to only escape non-clike identifiers
and make llvmir use it whereever a user-provided identifier might be
emitted
Basic codegen for records

This passes all the unit tests but is still pretty tough. In particular
TBAA is not implemented and the unit tests need to be fleshed out.