Refactor _TimeOp._validate to separate datetime vs timedelta vs dateoffset
Trying to mirror the logic in the datetimelike index classes.

Separate some of the tests in the same vein.  

No logic should be changed in this PR, it should be pure refactor.

This _will_ have a merge conflict with #18831.
