index._is_multi
See timeit stats in #16981.  In cases where we know `index` is some flavor of `pd.Index` object, replacing `isinstance(index, MultiIndex)` with `index._is_multi` cuts the runtime by 40-60%.  And `isinstance(index, ABCMultiIndex)` is about twice as expensive as `isinstance(index, MultiIndex)`.

These checks add up.  Among other things, every call to `DataFrame.__getitem__`  includes a check for `isinstance(self.columns, pd.MultiIndex)`.

 - [ ] closes #xxxx
 - [ ] tests added / passed
 - [ ] passes ``git diff upstream/master -u -- "*.py" | flake8 --diff``
 - [ ] whatsnew entry
