Avoid exponential inlining
This MR fixes several egregious examples in which GHC would create exponentially-large programs from quite small and innocent starting points.
Specifically:
- #13253 (closed) exponential inlining
- #10421 (closed) ditto
- #18140 (closed) strict constructors
As you'll see from the commit message, we still need to investigate some nofib regressions. But the bad cases are so terribly bad that we probably need some version of this patch in 8.12.
Submitting now for review; and CI especially perf.
NB: this is built on top of !3426 (merged), which is in similar territory, even though the latter has not quite landed.