Don't report too many errors.

Renamer errors are expensive to compute because they require us to look
for lexically similar names, which takes time. This only reports the
first 20 errors.
Improve the order of renamer errors.
Improve the error message when module and datatype names overlap.

This only affects ones that are in different scopes, which is not all
that common.
Fix parsing of files with comments interleaved with code.
Fix parsing of multiple module instance arguments.
Give better error messages when sets do not satisfy constraint Set.
Give more context when a type constraint is not satisfied.
Fix the error message when a module instance cycle is encountered.
Improve pretty printing of type schemes in type error messages.

If multiple types are printed this ensures that free variables are
represented in a consistent fashion.
Don't generalise let bindings without type annotations.

Generalising let bindings can lead to some very odd types being deduced
(locally) that are far too polymorphic. This makes the error messages
much harder to understand. This switches us to only generalise non-local
let bindings, which gives much leads to much better error messages.
Include relevant types in error messages.

This matches a new feature in GHC 7.8. Essentially, whenever an error
is encountered, the types of a certain number of 'relevant' type
variables are given. This appears to be helpful.
Allow type annotations on NameType declarations.
Disallow polymorphic datatypes.

Datatype fields that are polymorphic cause complications in many places,
and aren't really useful. Type annotations can be used to remove
polymorphism.
Plumbing for symbolic properties.