Add support to names keyword in Index
- [x] closes #19082
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Hey @WillAyd I did some changes related to what you've commented, that being said, I'm not a 100% sure that I've understood your second comment. To clarify my comment it looks like code has been added here to validate the `names` argument when called as part of the Index constructor. However, there also appears to be validation as part of the `MultiIndex` constructor (at least from an end user perspective - haven't dug deep in code).

Would there be a way to align those?

With that said I'm a little hesitant on this change. I understand the goal but it feels weird to have both a `name` and `names` argument as part of the constructor. Have to think through in more detail > With that said I'm a little hesitant on this change. I understand the goal but it feels weird to have both a name and names argument as part of the constructor.

I'd say that's an issue with the `Index` constructor's API. They're both valid arguments, this just updating the signature / docs to reflect that :) > They're both valid arguments, this just updating the signature / docs to reflect that :)

I assume that's just because the Index constructor appears to accept anything though, right? Not necessarily that it's valid.

```python
>>> pd.Index([], name="foo")
Index([], dtype='object', name=['foo'])
>>> pd.Index([], names=["foo"])
Index([], dtype='object')
>>> pd.Index([], something="foo")
Index([], dtype='object')
``` It's used if you take the MultiIndex route

```python
In [5]: pd.Index([(1, 2), (3, 4)], names=['a', 'b'], tupleize_cols=True)
Out[5]:
MultiIndex([(1, 2),
            (3, 4)],
           names=['a', 'b'])
``` Sorry I think I went in a circle but coming back to it...I don't see how having both `name` and `names` makes sense from an API perspective. I get we want to do that to achieve symmetry in our inheritance but from an end user perspective this feels like a step in the wrong direction closing; we want to deprecate names I think, this is going backwards.