Added mpl_15 decorator
- [X] progress towards #18190 
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

FWIW the functionality here could be slightly different, because the previous skip if items occurred in the middle of the function bodies instead of wrapping the function, so the first few lines of code within those functions would run in instances that are being skipped today. 

I've ignored that nuance because I find it strange that we would only want to run part of the test without any assertions for different versions of matplotlib, but if you feel it needs to be accounted for in some other fashion (say separate test cases) let me know
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18682?src=pr&el=h1) Report
> Merging [#18682](https://codecov.io/gh/pandas-dev/pandas/pull/18682?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/9629fef912dbeca5154e9cf58970bad3e02657f4?src=pr&el=desc) will **decrease** coverage by `0.01%`.
> The diff coverage is `88.88%`.

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

```diff
@@            Coverage Diff             @@
##           master   #18682      +/-   ##
==========================================
- Coverage   91.59%   91.57%   -0.02%     
==========================================
  Files         153      153              
  Lines       51257    51266       +9     
==========================================
  Hits        46949    46949              
- Misses       4308     4317       +9
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `89.44% <88.88%> (ø)` | :arrow_up: |
| #single | `40.69% <88.88%> (-0.1%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/18682?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/util/\_test\_decorators.py](https://codecov.io/gh/pandas-dev/pandas/pull/18682/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvX3Rlc3RfZGVjb3JhdG9ycy5weQ==) | `93.33% <88.88%> (-1.91%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/18682/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `25% <0%> (-58.34%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/18682/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `97.81% <0%> (-0.1%)` | :arrow_down: |
| [pandas/core/indexes/datetimes.py](https://codecov.io/gh/pandas-dev/pandas/pull/18682/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9kYXRldGltZXMucHk=) | `95.59% <0%> (-0.1%)` | :arrow_down: |
| [pandas/util/testing.py](https://codecov.io/gh/pandas-dev/pandas/pull/18682/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvdGVzdGluZy5weQ==) | `82.01% <0%> (+0.19%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/18682?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/18682?src=pr&el=footer). Last update [9629fef...3e38b0c](https://codecov.io/gh/pandas-dev/pandas/pull/18682?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 thanks!