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.