Unintuitive behaviour of MonthBegin(n=0)
From the [Anchored Offset Semantics](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#anchored-offsets) section of the docs:

> For the case when n=0, the date is not moved if on an anchor point, otherwise it is rolled forward to the next anchor point.

```
In [218]: pd.Timestamp('2014-01-02') + MonthBegin(n=0)
Out[218]: Timestamp('2014-02-01 00:00:00')

In [219]: pd.Timestamp('2014-01-02') + MonthEnd(n=0)
Out[219]: Timestamp('2014-01-31 00:00:00')

In [220]: pd.Timestamp('2014-01-01') + MonthBegin(n=0)
Out[220]: Timestamp('2014-01-01 00:00:00')

In [221]: pd.Timestamp('2014-01-31') + MonthEnd(n=0)
Out[221]: Timestamp('2014-01-31 00:00:00')
```

I understand that this is the intended behaviour, but it's neither intuitive nor useful. If I want to use MonthBegin to find the start of the current month, I'm out of luck, as there is no configuration that will work consistently for all days of a month:

```
In:  pd.Timestamp('2014-01-01') + MonthBegin(n=0)
Out: Timestamp('2014-01-01 00:00:00')

In:  pd.Timestamp('2014-01-02') + MonthBegin(n=0)
Out: Timestamp('2014-02-01 00:00:00')
```

Could I suggest changing the behaviour of anchored offsets for MonthBegin and similar _Begin offsets? Change the rule to something like:

> For the case when n=0, the date is not moved if on an anchor point, otherwise it is either rolled forward to the next anchor point or backwards to the previous anchor point. By default, the next anchor point is used, but the following date offsets use the previous anchor point instead:
>  - MonthBegin
>  - BMonthBegin or BusinessMonthBegin
>  - CBMonthBegin or CustomBusinessMonthBegin
>  - SemiMonthBegin
>  - QuarterBegin
>  - BQuarterBegin
>  - YearBegin
>  - BYearBegin

This way, the output would end up as:

```
In:  pd.Timestamp('2014-01-01') + MonthBegin(n=0)
Out: Timestamp('2014-01-01 00:00:00')
In:  pd.Timestamp('2014-01-02') + MonthBegin(n=0)
Out: Timestamp('2014-01-01 00:00:00')
```
