Implements the refactoring described in #100: There is a new Diagnostic class, in Mikan.TypeChecking.Monad.Diagnostic, which packages both the information necessary for generating a diagnostic message (and for toggling warnings) and support for subtyping inspired by Control.Exception.Exception. Existential and "serialised" wrappers for Diagnostic take the place of TypeError in TCErr and Warning in TCWarning, respectively.
Additionally, some errors which were only in TypeError as wrappers (SplitError, UnquoteError, ExecError, NicifierError and InteractionError) have been moved into their own Diagnostic instance, defined in their own "service" modules (e.g. Unquote gets Unquote.Errors). This follows the pattern I introduced for Conversion.Errors.
The diff is pretty large but should be reviewable commit-by-commit.