Some refactoring of Demand and DmdAnal

This was authored by SPJ and extracted from the "Improve the handling of
used-once stuff" patch by Joachim.
Do not split void functions

This is authored by SPJ, and split out out "Improve the handling of
used-once stuff" by Joachim.
Assign strictness signatures to primitive operations

This patch was authored by SPJ, and extracted from "Improve the handling
of used-once stuff" by Joachim.
Guarding against silly shifts

This patch was authored by SPJ and extracted from "Improve the handling
of used-once stuff" by Joachim.
Improve the handling of used-once stuff

Joachim and I are committing this onto a branch so that we can share it,
but we expect to do a bit more work before merging it onto head.

Nofib staus:
  - Most programs, no change
  - A few improve
  - A couple get worse (cacheprof, tak, rfib)
Investigating the "get worse" set is what's holding up putting this
on head.

The major issue is this.  Consider

    map (f g) ys

where f's demand signature looks like

   f :: <L,C1(C1(U))> -> <L,U> -> .

So 'f' is not saturated.  What demand do we place on g?
Answer
        C(C1(U))
That is, the inner C1 should stay, even though f is not saturated.

I found that this made a significant difference in the demand signatures
inferred in GHC.IO, which uses lots of higher-order exception handlers.

I also had to add used-once demand signatures for some of the
'catch' primops, so that we know their handlers are only called once.
Move peelFV from DmdAnal to Demand
Clarify the default demand on demand environments

by adding Notes and using easier to understand combinators.
Remove dmdAnalArg and replace by easier to understand code
Add Note [non-algebraic or open body type warning]
Split DmdResult into DmdResult and CPRResult

this is a small-step-refactoring patch and not very interesting on its
own.
Do not export DmdResult constructors in Demand.lhs
Rename postProcessDmdType to postProcessUnsat and use* to reuse*
Refactor peelManyCalls

its first argument is just used for its length (the arity of the call).
So changing the type to Int to reflect that.

Also add a note [Demands from unsaturated function calls] that hopefully
comprehensively and comprehensibly explains what is going on here.
Disentangle postProcessDmdTypeM and postProcessUnsat

Make different postProcess code paths for function arguments (which are
post-processed just to be both'ed) and unsaturated functions (which are
post-processed for other reasons.)
Make types of bothDmdType more precise

by only passing the demand on the free variables, and whether the
argument (resp. scrunitee) may or will diverge.
Update comments: Void# instead of State# RealWorld#
Copy-pasto.
Mention '-fno-ignore-asserts' in documentation.

(Closes: #8617)
Remove unused eqExprX
Merge latest upstream GHC changes