parametrize offsets tests
This began as part of #18489 and quickly became huge and tedious.  Merits separating out and getting out of the way.

- Move Year, Quarter, and Month offset test cases to a dedicated file

- Implement pytest.mark.parametrize in very-nearly all the remaining places.
might be worthwhile moving Week, LastWeekOfMonth, SemiMonth to separate test file
and FY253 to a separate file as well. > might be worthwhile moving Week, LastWeekOfMonth, SemiMonth to separate test file
and FY253 to a separate file as well.

Very much on board.  I'll also 

1) take the opportunity to move the SemiMonth offsets below the CustomBusinessMonth offsets so they're not in between BusinessMonth and CustomBusinessMonth.

2) throw in some new asvs > this patch is big enough!

Seriously, yah.  Glad I broke it out from the other one. # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=h1) Report
> Merging [#18494](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/38f41e64f4b8a0479f8835022af5e7343ccf8498?src=pr&el=desc) will **increase** coverage by `0.02%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/18494/graphs/tree.svg?token=eZ4WkYLtcO&width=650&src=pr&height=150)](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #18494      +/-   ##
==========================================
+ Coverage    91.3%   91.32%   +0.02%     
==========================================
  Files         163      163              
  Lines       49781    49781              
==========================================
+ Hits        45451    45463      +12     
+ Misses       4330     4318      -12
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `89.12% <100%> (+0.02%)` | :arrow_up: |
| #single | `40.79% <49.27%> (+0.06%)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/tseries/offsets.py](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvb2Zmc2V0cy5weQ==) | `97.03% <100%> (ø)` | :arrow_up: |
| [pandas/plotting/\_converter.py](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19jb252ZXJ0ZXIucHk=) | `65.25% <0%> (+1.81%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=footer). Last update [38f41e6...0b8e242](https://codecov.io/gh/pandas-dev/pandas/pull/18494?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 thanks @jbrockmendel 