[DEPR]: Deprecate setting nans in categories
WIP still

Closes https://github.com/pydata/pandas/issues/10748

I have to run for now, but will pick this up later today.
I think I'm missing a few in the tests, since the warning is showing up in a bunch of places (there's a way to convert those to errors for testing right?)

I had to refactor a couple function that were setting `._categories` directly instead of using `Categorical._set_categories`. I kept that in a separate commit. Could do a bit more refactoring with the `validate_categories` stuff, but that can be separate.

And I need to figure out the proper `stacklevel` for this warning. I think I used 3 for now.
