POC: rollback_array
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

xref #7449, #52105

This implements rollback_array for Month, Quarter, and Year offsets.  I've only checked the FooBegin cases and only in non-tzaware cases:

```
dti = pd.date_range("2016-01-01", periods=60, freq="15D")

mth = pd.offsets.MonthBegin(1)
qtr = pd.offsets.QuarterBegin(1)
yr = pd.offsets.YearBegin(1)


res_mth = pd.DatetimeIndex(mth.rollback_array(dti))
res_qtr = pd.DatetimeIndex(qtr.rollback_array(dti))
res_yr = pd.DatetimeIndex(yr.rollback_array(dti))

exp_mth = pd.DatetimeIndex([mth.rollback(x) for x in dti])
exp_qtr = pd.DatetimeIndex([qtr.rollback(x) for x in dti])
exp_yr = pd.DatetimeIndex([yr.rollback(x) for x in dti])

assert res_mth.equals(exp_mth)
assert res_qtr.equals(exp_qtr)
assert res_yr.equals(exp_yr)
```

Posting this as a POC so someone else can take it the rest of the way.  If no one does I'll circle back to it after focusing on my "do less work on the weekends" goal.
This pull request is stale because it has been open for thirty days with no activity. Please [update](https://pandas.pydata.org/pandas-docs/stable/development/contributing.html#updating-your-pull-request) and respond to this comment if you're still interested in working on this. Mothballing.