Big changes on tc-untouchables branch

(Before merging to HEAD we need to tidy up and write a proper commit message.)
When floating constraints outwards, promote the floated type variables

The work is done by the (remarkably simple) TcSimplify.promoteFloatedUnificationVars
Avoid emitting Given constraints for spontaneous unifications. Instead
keep spontaneous unifications /only/ in the TcS tybinds. Relevant note
is Note [Spontaneously solved in TyBinds] in TcInteract.
Merge branch 'tc-untouchables' of http://darcs.haskell.org/ghc into tc-untouchables
Minor fixes, mostly simplificaitons
Merge remote-tracking branch 'origin/HEAD' into tc-untouchables
A raft more changes,
 * simplifying and tidying up canonicalisation,
 * removing the flat cache altogether
 * making the FunEq worklist into a deque
More simplifications to the constraint solver

* inert_solved becomes dictionaries-only, inert_solved_dicts

* inert_solved_dicts is used only to cache the result of uses
  of a top level instance declaration, just like inert_solved_funeqs

* That in turn simplifies xCtFlavor and rewriteCtFlavor, because
  they no longer need a "should I cache" parameter.  (Moreover the
  settings for this parameter were very subtle; it's easy to get
  loops if you cache too much.  Caching only top-level instance
  uses is much safer, and eliminates all these subtle cases.)
A bunch more simplification and refactoring to the constraint solver

* Instead of Untouchables being a [Unique], it is simply an Int
  indicating the depth of nesting.  This works fine now that
  floatEqualities is promoting the floated unification variables
  to the outer level

* Remove the inert_tv_eqs (InScopeSet) from InertCans.  It wasn't
  being used.  See Note [Shadowing in a constraint] in TcRnTypes

* Rename inert_frozen to inert_insols

* Some simple refactoring in
     TcErrors.reportFlatsAndInsols
     TcInteract.kickOutRewritable
     TsSimplify.floatEqualities
Merge branch 'tc-untouchables', remote branch 'origin' into tc-untouchables
Wibbles to fe6ddf00, fixing infelicities
Some comments and false starts to do with ArrForm

There's a very very wrong piece of code in TcArrows;
and it is even triggering an ASERT failure now.  I need
to talk to Ross to figure out what is going on.
Comments only
Remove historical Unique parameter from pushUntouchables
Move inert_insols into the InertCans record

We might want to rename the type, but inert_insols really belongs
with these other constraints.
Make kickOutRewritable kick out insolubles

It always used to do so, but I removed it because I didn't see
why. Now I unsderstand why, and wrote
     Note [Kick out insolubles]
When defaulting, check for *meta* tyvars

I'd forgotten that we can have runtime skolems
(TcTyVarDetails = RuntimeUnk), and we definitely
don't want to attempt to default them!
Some refactoring; removes simplifyCheck
Moved solving of type families to zonkWC and a few simplifications
in TcSimplify. Now unflattening does not happen recursively inside
solveWanteds which should be a good performance win.
Merge remote-tracking branch 'origin/master' into tc-untouchables

Conflicts:
	compiler/typecheck/TcMType.lhs
	compiler/typecheck/TcSMonad.lhs