BUG: .astype() of a Float64Index to a Int64Index
closes #12881
closes #12866 

xref #12309 

So we allow astyping only to F8 (and now I8). 

```
In [2]: i = pd.Float64Index([0, 1, 2])

In [3]: pd.Float64Index([0, 1, 2]).astype('i8')
Out[3]: Int64Index([0, 1, 2], dtype='int64')

In [4]: pd.Float64Index([0, 1.1, 2]).astype('i8')
Out[4]: Float64Index([0.0, 1.1, 2.0], dtype='float64')

In [5]: pd.Float64Index([0, 1.1, 2]).astype('i4')
TypeError: Setting <class 'pandas.indexes.numeric.Float64Index'> dtype to anything other than float64 or object is not supported
```

Should we allow other integer/floats? (even though we upcast them anyhow), this is [5]

e.g. we allow: 

```
In [6]: Index([0, 1.1, 2],dtype='float32')
Out[6]: Float64Index([0.0, 1.10000002384, 2.0], dtype='float64')
```

Further on [4], should this raise instead?
 @sinhrks @TomAugspurger @jorisvandenbossche @shoyer 
 On In[4], shouldn't we follow numpy behaviour here?

```
In [3]: np.array([0, 1.1, 2]).astype('i8')
Out[3]: array([0, 1, 2], dtype=int64)
```
 ok all fixed up:

```
In [8]:  pd.Float64Index([0, 1, 2]).astype('i8')
Out[8]: Int64Index([0, 1, 2], dtype='int64')

In [9]: pd.Float64Index([0, 1.1, 2]).astype('i8')
Out[9]: Int64Index([0, 1, 2], dtype='int64')

In [10]: pd.Float64Index([0, 1.1, 2]).astype('i4')
Out[10]: Int64Index([0, 1, 2], dtype='int64')

In [11]: pd.Float64Index([0, 1.1, 2]).astype('f4')
Out[11]: Float64Index([0.0, 1.10000002384, 2.0], dtype='float64')
```
