Add testutil.NfiExports

The recent change to make (llambda nfi) expose different types based on
platform made it a bit tricky to get the NFI exports for testing. Wrap
the appropriate incantation in a new testutil.NfiExports so it can be
reused by tests
Add (define-type) and (llambda typed) library

(define-type) allows simple aliases to be defined for existing types.
This is identical to the same syntax in Typed Racket.

(llambda typed) exports (define-type) along with more Scheme-oriented
aliases for the lower level types in (llambda nfi).
Move primitives to (llambda internal primitives)

Before the primitives were split between Scheme, NFI and internal
primitives and exposed directly as virtual libraries. Instead move allt
he primitives to (llambda internal primitives) and have proper Scheme
libraries re-export the public interfaces.
Implement (ann) for expressions

This implements a Typed Racket-style (ann) primitive that will cast the
result of an expression to a given type. The functionality of (ann)ing
defines is unimplemented - (define:) will probably be the only way of
accomplishing that.

This is a bit over-zealous as it will also unbox expressions that are
already of the desired type. If this proves to be a performance issue it
may be addressd in the future.
Rename IntermediateValue.{valueType => cellType}

valueType has a completely different meaning after the last series of
renamings. Switch to "cellType" as it's actually a ct.CellType now
Add IntermediateValue.preferredRepresentation

This will be used to automatically determine the return type of
procedures.
Support for non-capturing lambdas

This won't even capture "stateless" values such as known procedures so
it's nearly useless. This should provide a base for future work,
however.