Support NDFrame.shift with EAs
Uses take internally.

Closes https://github.com/pandas-dev/pandas/issues/22386

One question: do we want to add `shift` to the interface, and dispatch to that? This just does the right thing at the block level, by writing a `shift` that'll work with an ExtensionArray.

CategoricalBlock still overrides `.shift` to call `Categorical.shift`, which uses a slightly faster implementation based around the codes and `np.roll` (~1.5-2x faster based on microbenchmarks)`.

We could add move `ExtensionBlock.shift `to `ExtensionArray.shift`, and just call that from ExtensionBlock. Then we can delete CategoricalBlock.shift.

I'm 50/50 on whether it's worth adding to the interface.