REF: use array_algos shift for Categorical.shift
We have duplicate code in Categorical.shift and Categorical.take that can be refactored out into Categorical._validate_fill_value (which is the name that DTA/TDA/PA use for the same method, which I intend to share eventually, xref #33660).  From there the rest of Categorical.shift can dispatch to array_algos.transforms.shift.

The logic changed here is a TypeError becoming a ValueError (which matches what DTA/TDA/PA do)
lgtm. comment (can merge and followon or do here). > (can merge and followon or do here).

Will do follow-up to make the copy consistent (and occur in exactly one place) > > (can merge and followon or do here).
> 
> Will do follow-up to make the copy consistent (and occur in exactly one place)

gr8