Modularized syntax and types

Standard types and prototypes are separate modules
each with their own `Type` families, i.e. there can't be
an accidental leakage of partial types into the typed syntax.
Same goes for external syntax and fully typed syntax.
Syntax, types and substitution functions are separated
into traits via the cake pattern as follows:

 * `TypeFamily`
   * Defines types trees, (lazy)fold, map.
 * `TypeOps`
   * Signatures for freevars, substitution on a `TypeFamily`.
 * `DefaultTypeOpsImpl`
   * Defines standard implementations for freevars and substs.
 * `TypedSyntaxFamily`
   * Defines typed expression trees, (lazy)fold, map.
 * `TypedSyntaxOps`
   * Signatures for freevars, substutition on a `TypedSyntaxFamily`.
 * `DefaultTypedSyntaxOps`
   * Defines standard implementations for freevars and substs.

The module (object) `TypedLanguage` replaces `TypedSyntax`
and `Types` and represents the standard fully typed expression
language with standard substitution and freevars notions.