Unify Index._dir_* with Series implementation
Have `Index` use the same implementation of `_dir_additions` and `_dir_deletions` that `Series` currently uses. Move that implementation into a shared base class. @jreback suggested that shared base class `DirNamesMixin` be moved from `core.base` to `core.accessor`.

<s>De-duplicate `_dir_additions` and `_dir_deletions` code.  `Index` currently gets its implementations of these two methods from `strings.StringMethodMixin`, but the implementation is just a special case of the implementation in `Series`.  That implementation is essentially The General Case, so this PR moves it up to a base class `DirNamesMixin`.  (I'm open to putting this elsewhere in the hierarchy)</s>

This PR removes `StringMethodMixin`, discussed in #17042.

<s>For `DatetimeIndex`, `TimeDeltaIndex`, and `PeriodIndex`, this adds a property `dt` that just returns `self`.  This way a user can access e.g. `item.year` symmetrically without having to check whether `item` is a `Series/Index`.

Holding off on writing tests until a consensus is reached.</s>

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