BUG: fix CategoricalBlock pickling

This should fix #8518.

Apparently, `NonConsolidatableMixIn.__init__` was copied from a pre-`BlockPlacement` version of `SparseBlock.__init__` which was incompatible with placement being a slice.  The current one is, so I moved it to NonConsolidatableMixIn class almost verbatim.
ahh, this is defined in ``tests/test_categorical.py``, pls remove from there and change the usages to use this one (or I can do after), lmk