Revert "MERGED: Fix a bug in the handling of nested orElse"

This reverts commit 5ea49271f793ed0f872342bf6a1cb0de10a48d94.
A better fix for #7493 (see comment for details)
Fix TcUnify.matchExpectedTyConApp so that it returns types of compatible kinds

This fixes Trac #7368. The problem was that we were matching
   Bad w ~ f (Bad f)
where (f :: * -> *).  Thta leads to (w ~ Bad f), which is
ill-kinded, but matchExpectedTyConApp was returning the (Bad f)
as the argument type, and that was being used to instanatiate
w in the data constructor type, which is very bad.

The code also becomes simpler and easier to understand, which is
an excellent thing.
Pass the correct inst_tys argument to dataConCannotMatch, in mkRecSelBinds

This fixes Trac #7503.
Tidy the type in badInstSigErr (fixes Trac #7545)
Update strictness documentation (Trac #7546)