BUG: Fix #13149 and ENH: 'copy' param in Index.astype()
- [x] closes #13149
- [x] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [x] whatsnew entry

**Update**
1. Float64Index.astype(int) raises ValueError if a NaN is present. 
   Previously, it converted NaN's to the smallest negative integer.
2. TimedeltaIndex.astype(int) and DatetimeIndex.astype(int) return.
   Int64Index, which is consistent with behavior of other Indexes.
   Previously, they returned a numpy.array of ints.
3. Added:
   - bool parameter 'copy' to Index.astype()
   - shared doc string to .astype()
   - tests on .astype() (consolidated and added new)
   - bool parameter 'copy' to Categorical.astype()
4. Fixed core.common.is_timedelta64_ns_dtype().
5. Set a default NaT representation to a string type in a parameter of DatetimeIndex._format_native_types().
   Previously, it produced a unicode u'NaT' in Python2.
