TST: strictly xfail
- [ ] closes #xxxx
- [ ] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Continuation of #38881. This handles cases where replacing pytest.xfail is clear, opened #38902 for the handful of remaining cases.

In the case where `pytest.xfail` is used for a test which has been yet to be implemented, I've added ~~`assert False` to maintain the current behavior of counting it as an xfail. Maybe there is a better alternative here.~~ `raise NotImplementedError`.
In #38881 you used request.applymarker which i guess is equivalent to request.node.add_marker.  is that an Officially Supported way of doing this?  What we've been doing works, but AFAICT isn't something pytest advertises @jbrockmendel Yes, they are equivalent. Under the hood, `applymarker` is just the line `self.node.add_marker(marker)`.

Docs for applymarker:

https://docs.pytest.org/en/stable/reference.html#pytest.FixtureRequest.applymarker

> This method is useful if you don’t want to have a keyword/marker on all function invocations.

I take this to mean we are using it in the intended way. great. conflict if you can merge master. also do we have an issue to check for *not* using `pytest.xfail` at all in precommmit? @jreback Merged master, will ping on green. Issue is #38902  thanks @rhshadrach 