REF: implement _should_compare
- [ ] closes #xxxx
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Index._is_comparable_dtype is limited because it misses a few cases: object dtype, and sub-dtypes within categorical.  This implements Indes._should_compare, which handles those correctly.  It then implements `_get_indexer_non_comparable` for cases in which we short-circuit non-comparable dtypes.

As a proof of concept, this then uses _should_compare and _get_indexer_non_comparable for `PeriodIndex.get_indexer`.

The behavior change, which this tests, is one that IIUC is a bug.  That is, when we do get_indexer with a method and non-comparable dtypes, we should raise instead of return all minus-ones.

If implemented, we'll be able to use _should_compare to simplify all of the get_indexer, get_indexer_non_unique, and set op methods.