ENH: Cast ndarray-like datetime64 arrays to Index properly

It turns out that the ndarray-like arrays of dtype `datetime64` were
not being properly cast to an `Index`, because -- due to a bug with
`np.datetime64` -- calling `np.asarray(x, dtype=object)` if x is an
ndarray of type `datetime64` results in an *integer* array.

This PR adds tests and a work around to `pd.Index.__new__`.

Related #5460