WIP: Add DayEnd, DayBegin Offsets (Help Wanted)
- [ ] tests
- [ ] whatsnew
- [ ] update [documentation](https://dev.pandas.io/user_guide/timeseries.html#offset-aliases)

This is missing tests, but I'm not sure I'm doing this properly (timezones, DST) so comments/advice welcome. If reviewers are inclined to merge a complete PR, I'll gladly add the missing tests.

I think the `+timedelta(days=1,nanoseconds=-1)` trick is safe, pytz database shows no dst transitions at midnight in the history of the world, though I encounter a trippy "non-existent time" Exception, which should merit an achievement badge in some other context.

```python
In [4]: import pandas as pd
   ...: index=pd.date_range("2011-12-31","2012-01-01",freq="12H")
   ...: index
Out[4]: 
DatetimeIndex(['2011-12-31 00:00:00', '2011-12-31 12:00:00',
               '2012-01-01 00:00:00'],
              dtype='datetime64[ns]', freq='12H')

In [5]: index+pd.offsets.DayEnd()
Out[5]: 
DatetimeIndex(['2011-12-31 23:59:59.999999999',
               '2011-12-31 23:59:59.999999999',
               '2012-01-01 23:59:59.999999999'],
              dtype='datetime64[ns]', freq='12H')

In [6]: index-pd.offsets.DayEnd()
Out[6]: 
DatetimeIndex(['2011-12-30 23:59:59.999999999',
               '2011-12-30 23:59:59.999999999',
               '2011-12-31 23:59:59.999999999'],
              dtype='datetime64[ns]', freq='12H')

In [2]: index-pd.offsets.DayBegin()
Out[2]: DatetimeIndex(['2011-12-30', '2011-12-30', '2011-12-31'], dtype='datetime64[ns]', freq='12H')

In [3]: index+pd.offsets.DayBegin()
Out[3]: DatetimeIndex(['2012-01-01', '2012-01-01', '2012-01-02'], dtype='datetime64[ns]', freq='12H')
```

I needed `DayEnd` in #26959, when you want to compute rolling stat by day, and you want the window backward to always be from the end of the day, not whatever random time the last event that day occurred.

related #7049, insofar as users have a need for a wider range of aliases then supported.