Use control.Exception for MatchFailedException

The control.Exception helpers are intended for flow control exceptions
like MatchFailedException. It makes me feel slightly less guiltly about
using exceptions for flow control and cleans up the code a bit.
Add unit test for ScopedSyntaxTree

This didn't catch any errors but it should've been there since the
beginning
Add BoxedRecord type

This is currently unreferenced but will shortly be needed for codegen
Add infrastucture for record types

- Add new ValueType abstract class that divides types in to scalar
  (formerly unboxed) types, boxed types, and record types

- Replace almost all usages of nfi.NativeType with ValueType

- Add currently unused ExpressionTree nodes for record type procedures

- Add IntermediateValue.toRecordTempValue stub that will allow
  extracting record values