Untabify
Untabify
Untabify
Untabify
Move renamer splice functionality into a separate module.

This structure now matches that of the type checker.
Consolidate TH renaming.
Add syntactic support for typed expression brackets and splices.

Right now the syntax for typed expression brackets and splices maps to
conventional brackets and splices, i.e., they are not typed.
Add names for TExp type constructor and unType.
Differentiate typed and untyped splices and brackets in the abstract syntax.
Track the typed/untyped distinction in the current TH stage.

Also check for illegal typed/untyped bracket/splice combinations.
Check the staging restriction in the renamer.
Track TH stage in the renamer.
Add support for typed brackets and splices.
Clean up error context when checking brackets/splices.
Clean up smart constructors for splices.
Add support for pattern splices.
Add full support for declaration splices.

Since declaration splices are now untyped, they can be used anywhere a
declaration is valid, including in declaration brackets.
Code formatting cleanup.
Allow splices to add additional top-level declarations.
Change the types of typed brackets and splices.

The essence of this change is that a TExp a now wraps a TH.Exp instead of a
TH.ExpQ. This means:

 * A typed bracket [||...||] now has type Q (TExp tau), where tau is the type of
   the expression in the bracket.

 * A typed splice $(...)  must contain a value of type Q (TExp tau), and has
   type tau.

Previously, typed brackets had type TExp tau, and typed splices had to contain a
value of type TExp tau.