CLN: Index.__new__
underlying goal is to share code between Index.__new__ and pd.array

Unrelated cleanup in DataFrame.select_dtypes because I found it cumbersome.
thanks @jbrockmendel yeah this is some pretty hard core logic, thanks for simplifying