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.
I've moved it from [there](https://github.com/pydata/pandas/pull/8519/files#diff-ed4f442894a2f521dfac3193a3a8d8a0L24) to here.