dispatch Series[datetime64] ops to DatetimeIndex
State: closed

This is the culmination of a bunch of recent work.

- [x] closes #18850, closes #18808, closes #17837 
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

If merged, this will subsume #18960 and will obviate parts of #18964.  This will also fix (but not test, so we'll leave the issue open for now) the lack of overflow checks #12534.  Also in a follow-up we'll be able to remove a bunch of _TimeOp.

Labels:
name: Datetime
description: Datetime data dtype
name: Timedelta
description: Timedelta data type
name: Clean

Comments:
rebase and push again, fixed some hanging by Travis CI
I think it will be much cleaner / better to have 1 PR which addresses any/all of TimeOp issues. You seem to want to change it, which is totally fine. But rather than just hack around, let's blow it away.
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=h1) Report
> Merging [#19024](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/04beec77e5a713dd90ba31dcf7ad43fd64ac55bb?src=pr&el=desc) will **increase** coverage by `0.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/19024/graphs/tree.svg?token=eZ4WkYLtcO&src=pr&width=650&height=150)](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #19024      +/-   ##
==========================================
+ Coverage   91.56%   91.58%   +0.01%     
==========================================
  Files         150      150              
  Lines       48942    48897      -45     
==========================================
- Hits        44816    44784      -32     
+ Misses       4126     4113      -13
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `89.95% <100%> (+0.01%)` | :arrow_up: |
| #single | `41.74% <60%> (-0.01%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/ops.py](https://codecov.io/gh/pandas-dev/pandas/pull/19024/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvb3BzLnB5) | `91.91% <100%> (+1.49%)` | :arrow_up: |
| [pandas/core/computation/expressions.py](https://codecov.io/gh/pandas-dev/pandas/pull/19024/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvY29tcHV0YXRpb24vZXhwcmVzc2lvbnMucHk=) | `93.27% <0%> (-1.69%)` | :arrow_down: |
| [pandas/util/testing.py](https://codecov.io/gh/pandas-dev/pandas/pull/19024/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvdGVzdGluZy5weQ==) | `84.95% <0%> (+0.21%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=footer). Last update [04beec7...4efb27a](https://codecov.io/gh/pandas-dev/pandas/pull/19024?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

Yes, I very much want to get rid of `_TimeOp`.  The strategy so far has been to first address the various ways in which `_TimeOp` behaves differently from `DatetimeIndex`/`TimedeltaIndex`, that way we make sure a) we have appropriate tests for each bug that gets fixed, b) appropriate WhatsNew notes, and c) check that these differences are in fact unintentional.

> You are welcome to put it in _TimeOp for now or rip out TimeOp.

For reasons discussed elsewhere, putting it _in_ `_TimeOp` is not a viable option long-term.  What we _can_ do is I can amend this PR to rip out the `is_datetime_lhs` cases, leaving only the `is_timedelta_lhs` cases.  We're a few steps away from being able to rip those out, but we're getting there.
that would ls be fine
see how easy that was! removing code is fun!

anyhow obviously want to come back and clean this up even more, and definitly add some comments on what is non-obvious in the code (e.g. where datetimes are dispatched to DTI)