PERF: vectorized DateOffset with months
This is a follow-up to https://github.com/pydata/pandas/pull/10744.  In that, vectorized versions of some offsets were implemented, mostly by changing to periods and back.  

The case of shifting by years/months (which is actually most useful to me) required some extra hoops and had poorer performance - this PR implements a special cython routine for that, for about a 10x improvement. 

```
In [3]: s = pd.Series(pd.date_range('1900-1-1', periods=100000))

# Master
In [4]: %timeit s + pd.DateOffset(months=1)
1 loops, best of 3: 140 ms per loop

# PR
In [2]: %timeit s + pd.DateOffset(months=1)
100 loops, best of 3: 14.2 ms per loo
```

@jreback - pushed changes for your comments and added `MonthEnd` and `MonthBegin`

For your comment about using this routine in the `DateOffset` are you talking about cythonizing the actual `apply` method too?  On that front, I see there is an `offsets.pyx` file, but doesn't look it's actually used?
 - do we have an asv benchmark for this? if not pls add one. otherwise minor change. lmk
- add to the perf section (e.g. just add this issue on in the whatsnew next to #10744) 
 Made those doc changes.  Yeah,  there is an `asv` for `DateOffset`

```
    before     after       ratio
  [8ea8968 ] [c1d53f9 ]
-  121.83ms    18.49ms      0.15 timeseries.timeseries_datetimeindex_offset_fast.time_timeseries_datetimeindex_offset_fast
-  121.50ms    21.70ms      0.18  timeseries.timeseries_series_offset_fast.time_timeseries_series_offset_fast
```
 @chris-b1 thanks! these pr's are awesome! keep em coming!
