Move time operations for Series into class _TimeOp

* clarify/simplify time arithmetic-specific code into a separate class
* cleanup extraneous `set` and containment checks in branches
* refactor validation checks to separate function
* combine branches and dry out repetitive code
* move convert_to_array out of arith method
* self --> left; other --> right [possibly clearer for future refacotr]
* change handling of DateTimeIndex (no longer need additional return)
* add np1.6 check for integer --> timedelta conversion under the hood
ENH: Series.str.extract returns regex matches more conveniently than Series.str.match.