Make CaseElim a bit less aggressive

See Note [Case elimination: lifted case]:

We used to do case elimination if
        (c) the scrutinee is a variable and 'x' is used strictly
But that changes
    case x of { _ -> error "bad" }
    --> error "bad"
which is very puzzling if 'x' is later bound to (error "good").
Where the order of evaluation is specified (via seq or case)
we should respect it.

c.f. Note [Empty case alternatives] in CoreSyn, which is how
I came across this.
Allow empty case expressions (and lambda-case) with -XEmptyCase

The main changes are:
  * Parser accepts empty case alternatives
  * Renamer checks that -XEmptyCase is on in that case
  * (Typechecker is pretty much unchanged.)
  * Desugarer desugars empty case alternatives, esp:
      - Match.matchWrapper and Match.match now accept empty eqns
      - New function matchEmpty deals with the empty case
      - See Note [Empty case alternatives] in Match

This patch contains most of the work, but it's a bit mixed up
with a refactoring of MatchGroup that I did at the same time
(next commit).
Refactor HsExpr.MatchGroup

 * Make MatchGroup into a record, and use the record fields

 * Split the type field into two: mg_arg_tys and mg_res_ty
   This makes life much easier for the desugarer when the
   case alterantives are empty

A little bit of this change unavoidably ended up in the preceding
commit about empty case alternatives
Add an ASSERT
Switch on -XEmptyCase when renaming derived declarations

Compiler-generated code can have empty cases
Merge branch 'master' of darcs.haskell.org:/home/darcs/ghc