compiler: Add (Rec) recursive type constructor

This allows Scheme programs to define arbitrary recursive types. The
type constructor's syntax is identical to the one defined by Typed
Racket.

This also adds unit tests for recursive type predicates now that they
can be defined.