Split test_categorical into subpackage (#18497)
- [X] closes #18497
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Speaking to the methodology here, I created separate files mirroring what was provided in the other test packages. Within each file, there is one class for standard categorical tests and one for "block" tests, owing back to how this file is currently structured.

Because there were setup functions for only a very limited number of test cases, rather than creating those as separate classes within each module I lumped all of them into one ``test_generic.py`` file.