BUG: offsets.apply may return datetime

Currently, ``offsets.appy``, ``rollforward`` and ``rollback`` returns `Timestamp` if argument is `Timestamp` or ``np.datetime64``. 

If input is ``datetime``, these functions return ``datetime`` or ``Timestamp`` inconsistently depending on internal process. It may better to always return ``Timestanp``? 

### Affected Offsets
- 'pandas.tseries.offsets.Day'
- 'pandas.tseries.offsets.MonthBegin'
- 'pandas.tseries.offsets.FY5253Quarter'
- 'pandas.tseries.offsets.FY5253'
- 'pandas.tseries.offsets.Week'
- 'pandas.tseries.offsets.WeekOfMonth'
- 'pandas.tseries.offsets.Easter'
- 'pandas.tseries.offsets.Hour'
- 'pandas.tseries.offsets.Minute'
- 'pandas.tseries.offsets.Second'
- 'pandas.tseries.offsets.Milli'
- 'pandas.tseries.offsets.Micro'