Dispatch Index ops to Series
Getting ever closer to a single implementation.
Looks reasonable. What's the ideal final state? For future mico-optimization, I could imagine an implementation that does index-specific things (e.g. deferring for `op(Index, Series)`) and then just `box(op(array1, array2))`. It's a bit unfortunate that we have to pay the Series constructor performance tax on each op. > What's the ideal final state?

- Contingent on 2D EA happening, the ops are defined directly on PandasArray and either Index._data is a PandasArray or calls PandasArray(self._data) in the op instead of Series(self)
- Otherwise, it'll take some closure-rearrangement, but I think we can get a version of those ops that operates directly on ndarray.
- Regardless: a single implementation so we get internal consistency for free (not-yet-conformant: RangeIndex, IntegerArray, SparseArray) thanks @jbrockmendel 