BUG: CustomBusinessMonthBegin(End) sometimes ignores extra offset (GH41356)
- [x] closes #41356 #14869
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

-----------------
**Problem description**: _CustomBusinessMonth does not apply extra offset when initially rolled month begin `new` is already a business day. This happens because we currently use CustomBusinessDay.rollforward (rollback) to both 1) roll to a business day and 2) apply the extra offset. 
**Fix**: Separating the logic to 1) roll to a business day and 2) apply the extra offset.
@jackzyliu can you merge master to resolve conflicts Hi @simonjayhawkins, I just rebased after master, but some checks started failing and I can't replicate the failed tests offline. Examples: 
- `pandas/tests/tseries/offsets/test_offsets_properties.py::test_on_offset_implementations` with actions-38.yaml
- `pandas/tests/arithmetic/test_datetime64.py::TestDatetimeIndexArithmetic::test_sub_dti_dti` with actions-39-numpydev.yaml
 
These checks were successful before rebasing without any code change. What could be the issue here?  The test_on_offset_implementations failure is a hypothesis failure so that maybe the reason it didn't fail before. may need to investigate that one further. The numpydev failures are a known issue. Re-rebased after master. @simonjayhawkins 



> The test_on_offset_implementations failure is a hypothesis failure so that maybe the reason it didn't fail before. may need to investigate that one further. The numpydev failures are a known issue.

Previously, `pandas/tests/tseries/offsets/test_offsets_properties.py::test_on_offset_implementations` unrelatedly failed with the following pair of randomly generated test inputs,:
```
dt = datetime.datetime(1900, 1, 1, 0, 0, tzinfo=pytz.timezone('Africa/Kinshasa'))
offset = pd.offsets.MonthBegin(66)
``` 
I created a separate issue and pull request for this.  Bumping up this PR for further review. Since we just released `v1.3.0`, I have moved the whatsnew entry to `1.3.1` for now. Happy to move it to `1.4.0` instead. 

The failed test seem to come from master?

Please let me know of further comments. Thanks. @jreback @jbrockmendel @simonjayhawkins 

- Moved whatsnew entry to `1.4.0`
- Rebased after master
- All checks green

Please let me know of further comments. Thanks! Resolved conflict with master. Green. thanks @jackzyliu, sorry about the wait, lots of PRs :->

keep em coming!