REF: DatetimeLikeArray
TODO:

- [x] DatetimeLikeArrayMixin.astype(int) ignores sign and size?
- [ ] _from_sequence too permissive?
- [x] OK with DatetimeArray.view?
- [x] tz vs. dtype in `DatetimeArray.__init__`: https://github.com/pandas-dev/pandas/pull/24024#discussion_r241445450
- [ ] Index._simple_new consistency: https://github.com/pandas-dev/pandas/pull/24024#discussion_r241458796

---

n.b.: right now I have a few other PRs in this branch (#23601, #23990, #24023). The eventual diff is at https://github.com/TomAugspurger/pandas/compare/disown-tz-only-target...TomAugspurger:disown-tz-only-rebased.

Also, I would say this isn't *quite* ready for review yet, but I've been promising it for a while. I'm going to try to split off a bit more into separate PRs.

---

This implements DatetimeArray and TimedeltaArray, arrays for storing datetime
(tz naive or aware) and timedelta data.

### High-level Design:

Everything here applies equally to TimedeltaIndex / TimedeltaArray, other than
references to DatetimeTZDtype. We don't have an ExtensionType for Timedelta.

DatetimeIndex's data is now a DatetimeArray, rather than an ndarray, and its dtype
is `dtype::Union['datetime64[ns]', DatetimeTZDtype]`.

**Class Hierarchy**: We've split DatetimeIndex to compose a DatetimeArray,
rather than inherit it.

Old - DatetimeIndex: ![dti_master](https://user-images.githubusercontent.com/1312546/49312507-03319980-f4aa-11e8-8ae9-2b85fb5c23f2.png)

New - DatetimeIndex: ![dti_pr](https://user-images.githubusercontent.com/1312546/49312508-03319980-f4aa-11e8-8c31-1025e64bf981.png)


New - DatetimeArray: ![dta_pr](https://user-images.githubusercontent.com/1312546/49312506-03319980-f4aa-11e8-99ae-a41e1eaad210.png)


**Internals** I've mostly given up here... Things are *basically* as they were
before, with the exception that DatetimeTZBlock now extends ExtensionBlock. **In
particular** tz-naive data is still stored in a DatetimeBlock, and is still
consolidatable. This isn't elegant, but we've lived with it for this long.
Future releases can clean it up, possibly when we rewrite / cythonize the block
manager, possibly before.

### Types of changes

1. Some changes from `x.view('i8')` to `x.astype('i8', copy=False)` to
   support getting i8 values from {ndarray, DatetimeIndex, DatetimeArray}.
   We could revert those if we implemented DatetimeArray.view, but I don't
   think we should. However, this is slower than `.view` for ndarrays, so
   I'm going to find another way.
2. Many places where we did `series.values` instead of `series._values`.
3. Moves from PeriodArray / PeriodIndex to a base class. I've annotated these
   with `NB: Moved from...`
4. Test skips / xfails. I intended to resolve all of these over the next few
   days.

---

TODO:

- [x] Split out DatelikeOps and TimelikeOps changes (#24038)
  - [x] independent tests for DatelikeOps & TimelikeOps methods on arrays.
- [x] re-clean up the constructors. I may have some cruft from rebasing
- [x] identify shared code in PeriodArray / PeriodIndex that can be moved up
- [ ] all the xfailed tests
- [ ] identify code that was special casing Datetime-dtyps (like `is_extension_type`).
- [ ] API: Series[datetimetz].unique: ndarray[object] or DatetimeArray?


Closes #23185
Closes #23932 
closes #24465 