BUG: fix index op names and pinning
This is a moderately big one, but changes very little.

Fixes incorrect Index ops names and several methods that are defined but not pinned to the class (#19716).

Avoids the need to pass `reversed` and `str_rep` in a bunch of places, cleans up some of the Index classmethods.

Removes the no-longer-needed catching of AttributeError in RangeIndex ops.

The part that may be controversial (and almost certainly needs new tests) is that `Index.__rsub__` is implemented, since it doesn't currently exist.  This implements it in "the obvious way", but the fact that `Index.__sub__` isn't defined in the obvious way suggests this _might_ not be desired.  Comments welcome.

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