_typ checks in tslib, period
In a couple of places in `_libs.tslib` and `_libs.period` there are checks for `hasattr(other, '_typ')` that look like they intended to only catch `Series` and `Index` subclasses.  They will now catch, among others, `DateOffset`.  This doesn't appear to be causing a problem at the moment, but it is probably worth being more specific about what `_typ`s should be caught.

Examples of where this shows up:

tslib
```
cdef class _Timestamp(datetime):
    [...]
    def __add__(self, other):
        [...]
        # index/series like
        elif hasattr(other, '_typ'):
            return NotImplemented
       [...]

cdef class _NaT(_Timestamp):
    [...]
    def __sub__(self, other):
        if isinstance(other, (datetime, timedelta)):
            return NaT
        try:
            result = _Timestamp.__sub__(self, other)
            # Timestamp.__sub__ may return DatetimeIndex/TimedeltaIndex
            if result is NotImplemented or hasattr(result, '_typ'):
                return result
        except (OverflowError, OutOfBoundsDatetime):
            pass
        return NaT
```

`_Timestamp.__sub__` handles this more specifically:
```
   def __sub__(self, other):
        [...]
        # a Timestamp-DatetimeIndex -> yields a negative TimedeltaIndex
        elif getattr(other, '_typ', None) == 'datetimeindex':
            # timezone comparison is performed in DatetimeIndex._sub_datelike
            return -other.__sub__(self)

        # a Timestamp-TimedeltaIndex -> yields a negative TimedeltaIndex
        elif getattr(other, '_typ', None) == 'timedeltaindex':
            return (-other).__add__(self)
```