ENH: NumericIndex for any numpy int/uint/float dtype
- [x] closes #16404
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

This PR presents a unified index type called `NumericIndex` for numerical indexing, supporting int64/32/16/8, uint64/32/16/8 and float64/32/16 numpy dtypes. This means that indexes with other numeric numpy dtypes than int64, uint64 and float64 will become possible. This index type is therefore functionally a super type of `Int64Index`, `UInt64Index` and `Float64Index` and is intended to eventually replace those. 

Comments very welcome, of course, as this is probably quite a fundamental change to Pandas. @pandas-dev/pandas-core.

## Status
Missing is especially:
* docs and better doc string
* marking `NumericIndex` as experimental in 1.3?

## Deprecation cycle
ThIs PR is intended to be fully backwards compatible.

This means that public operations that currently return e.g. a `Int64Index`, will continue working unchanged. My view is that `NumericIndex` should replace `Int64Index`, `UInt64Index` and `Float64Index` in Pandas 2.0 and those index types should therefore be removed by 2.0. They should therefore get a deprecation warning in timely manner, before 2.0.

Internally there are some use of especially `Int64Index`, for example in groupby and join ops. That could be replaced with `NumricIndex` straight away, giving a performance benefit in cases where casting to higher dtypes can be avoided.

## Outside of scope of this PR
I do not intend to add support for nullable numeric dtypes in this PR. This is partly for technical reasons (there isn't any indexing engines for those types currently) but also to limit the scope of this PR. I'm not opposed to add support for those dtypes later, but I think adding them here would be too much for this PR. Also, it might be more sensible to have extension types in a different index class than numpy types, so probably better to look into that seperately.

Actual deprecation of `Int64Index`, `UInt64Index` and `Float64Index` should also be in a later PR IMO. If Pandas 2.0 is far in the future, it may be better holding off deprecating them until we see a v2.0 in the horizon instead of having a very long deprecation cycle for a relatively often used part of Pandas.
