Rename (Pair) to (Pairof)

This is consistent with Typed Racket
compiler: Implement ValueType.toString

This uses NameForType to make toString produce the friendly Scheme type
name for a type. This worked previously but was broken by the recursion
changes
Implement (List) type constructor

This creates a fixed length list where the type of each member is known.
This is useful for constructing Schemeful tuples. The syntax is
identical to Typed Racket.
compiler: Allow implicit recursive types

Treat every (define-type) as if the type was enclosed by a (Rec) with
the defining type's name. This allows a more lightweight and intuitive
definition of types that are recursive to their outer level.
compiler: Fix error message grammar

The error for invalid field names with typing is disabled tried to be
too clever with string concatenation. Instead use a separate error
messages for the typed and untyped case.