De-duplicate add_offset_array methods
Combine DTI/TDI/PI add_offset_array and sub_offset_array methods.

Re-order `__add__` and `__sub__` if/else branches to put scalars up front.

This was going to include fixes for DTI/TDI with ndarray[timedelta64]/ndarray[datetime64], but the diff got big enough to split that off to the next one.