ENH: nullables use Kleene logic for any/all reductions
- [x] xref #41967
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

This gives consistency for nullable dtype treatment across `.any/.all` and the groupby versions which already used Kleene logic. Diff looks big, but this is just moving `BooleanArray.any` and `BooleanArray.all` to `BaseMaskedArray`