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
Frontend support for record types

This implements an R7RS compatible (define-record-type) with an
extension for optional typing. Recursive types are supported through a
slight hack of making vt.RecordType.fields mutable.
Add functional test for record types

These all parse correctly but explode due to lack of implementation
at the planner level and below