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`.