API: generalized check_array_indexer for validating array-like getitem indexers
Closes https://github.com/pandas-dev/pandas/issues/30738. Also fixes the performance issue for other arrays from https://github.com/pandas-dev/pandas/issues/30744, and related to https://github.com/pandas-dev/pandas/pull/30308#issuecomment-571146305

This generalizes the `check_bool_array_indexer` helper method that we added for 1.0.0 to not be specific to boolean arrays, but any array-like input, and ensures that the output is a proper numpy array that can be used to index into numpy arrays.

I think such a more general "check" is useful, to avoid that all (external+internal) EAs need to do what the test EAs are already doing (checking for integer arrays as well) at https://github.com/pandas-dev/pandas/blob/master/pandas/tests/extension/decimal/array.py#L118-L126, and also to fix the performance issue in a general way (as was now only done for Categorical in https://github.com/pandas-dev/pandas/pull/30747/files)

If we agree on the general idea, I still need to clean up this PR (eg remove the existing `check_bool_array_indexer`, update the extending docs, etc)

cc @TomAugspurger 