PERF: lib.Validator iteration
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [ ] whatsnew entry

This is yak-shaving the trails back to a bug in Series.where with nullable dtypes.

```
from pandas._libs.lib import *

arr = np.empty(10**6, dtype=bool).astype(object)

%timeit is_bool_array(arr)
8.87 ms ± 28.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  # <- master
5.33 ms ± 11.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  # <- PR
```