42cfcf6e

Make `NoRecursion` optional

Any dependency can introduce complexity when solving bounds. This gets
`NeRecursion` out of the way automatically.

1. it introduces a new flag, `verify-no-recursion` that controls the use of
   `NoRecursion` and defaults to `True`;
2. if the solver can’t find a solution with the flag enabled, it will
   automatically try again with the flag disabled (that is, no dependency on
   `no-recursion`);
3. the local `cabal.project` file has `flags: +verify-no-recursion`, which
   prevents the solver from trying without the flag enabled, ensuring that local
   package development always has `NoRecursion` enabled, even if it causes the
   solver to fail.

This also makes a few other minor changes:

- Setup no longer uses `NoRecursion`, because it’s not possible to
  conditionalize it with the flag.
- The `noisy-deprecations` flag now has `manual: True`, because disabling it
  won’t help the solver.
- `custom-setup` has been moved above the `flag` sections because flags can’t
  apply to `custom-setup`.
Time to Start Worker time Duration Time to finish
Config 0s 1s 1s 1s
Eval 1s 2m55s 2m55s 2m56s
Build 2m57s 13m14s 13m49s 16m47s
Suite 0s 16m10s 16m46s 16m47s