Index._shallow_copy does not handle data types
integer index with float data types:

```
>>> i
Int64Index([1, 2], dtype='int64')
>>> i._shallow_copy(i.values.astype('f8'))
Int64Index([1.0, 2.0], dtype='float64')
```

another issue: an index which is not equal to its copy:

```
>>> i
Float64Index([1.0, 2.0], dtype='float64')
>>> j = i._shallow_copy(i.values.astype('O'))
>>> j
Float64Index([1.0, 2.0], dtype='object')
>>> j.equals(i)
False
>>> j.equals(j.copy())
False
```
