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.
Add Converges to DmdResult

to detect definite convergence (required for nested CPR).
In deferType, return convRes = Converges NoCPR

because this is the right-identity to `bothDmdResult`, and this is the
right thing to do in a lazy context.
Initial work on Nested CPR
Comments and small refactor
Fix a lubDmdResult equation
Unify RetProd and RetSum to RetCon in CPRResult
Use isTypeArg instead of isTyCoArg (forgot why)
Recover [CPR for sum types] (slightly differently)
Loop breakers are not allowed to have a Converges DmdResult
Check mAX_CPR_SIZE in dmdAnalVarApp
Add a flag -fnested-cpr-off to conveniently test the effect of nested CPR
Actually create a nested CPR worker-wrapper
in Demand.lhs, remember what is a sum type

because we want to zap CPR information for sum types not only on the
outermost level, but also nested.
See Note [CPR for sum types]
This comes up in sublist in Listplikefns in nofib’s boyer2.
Temporarily disable nested CPR inside sum types