Fix bugs in WeekOfMonth.apply, Week.onOffset
In the process we get rid of `WeekOfMonth.getOffsetOfMonth` and `LastWeekOfMonth.getOffsetOfMonth`, which were idiosyncratic what arguments they passed to `datetime`.

The issues this addresses are orthogonal to #18762, but the code affected does overlap.  In particular, after this, `roll_monthday` will not be needed in 18762.

closes #18864
closes #18672 
closes #18510
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
