PLOT: Add option to specify the plotting backend
- [x] closes #14130
- [x] tets added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Adding option to specify the plotting backend. This does not change the plotting API, so for now backends are expected to implement the existing methods in the matplotlib API. This API is expected to change as a result of the discussions in #26747.



Just realised with @TomAugspurger previous branch on the same work that I can simply do `cf.get_option(key)`. So I guess the question is simply:
- Do we want to import the backend module when it is set, or when the user first plots? # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=h1) Report
> Merging [#26753](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/c7748ca057cad4a80a6c4cbf8b49c5d9f3e7ea1c?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `40.9%`.

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

```diff
@@            Coverage Diff             @@
##           master   #26753      +/-   ##
==========================================
- Coverage    91.7%   91.67%   -0.03%     
==========================================
  Files         179      179              
  Lines       50767    50784      +17     
==========================================
+ Hits        46555    46558       +3     
- Misses       4212     4226      +14
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.27% <40.9%> (-0.02%)` | :arrow_down: |
| #single | `41.21% <18.18%> (-0.08%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/config\_init.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvY29uZmlnX2luaXQucHk=) | `93.07% <100%> (+0.16%)` | :arrow_up: |
| [pandas/plotting/\_core.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19jb3JlLnB5) | `84.1% <31.57%> (-4.85%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `78.94% <0%> (-10.53%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `96.88% <0%> (-0.12%)` | :arrow_down: |
| [pandas/util/testing.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvdGVzdGluZy5weQ==) | `90.73% <0%> (+0.1%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26753?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/26753?src=pr&el=footer). Last update [c7748ca...776e82d](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=h1) Report
> Merging [#26753](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/c275dbfcee0fa9644fa2718ad76fd91ca056069b?src=pr&el=desc) will **decrease** coverage by `<.01%`.
> The diff coverage is `91.3%`.

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

```diff
@@            Coverage Diff             @@
##           master   #26753      +/-   ##
==========================================
- Coverage   91.98%   91.97%   -0.01%     
==========================================
  Files         180      180              
  Lines       50760    50772      +12     
==========================================
+ Hits        46690    46700      +10     
- Misses       4070     4072       +2
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.57% <91.3%> (ø)` | :arrow_up: |
| #single | `41.82% <34.78%> (-0.11%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/plotting/\_misc.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19taXNjLnB5) | `64.86% <100%> (+0.3%)` | :arrow_up: |
| [pandas/plotting/\_core.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19jb3JlLnB5) | `89.38% <100%> (+1.18%)` | :arrow_up: |
| [pandas/core/config\_init.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvY29uZmlnX2luaXQucHk=) | `95.8% <87.5%> (-1.05%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `88.88% <0%> (-11.12%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/26753/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `96.89% <0%> (-0.12%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/26753?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/26753?src=pr&el=footer). Last update [c275dbf...1f4e1c0](https://codecov.io/gh/pandas-dev/pandas/pull/26753?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 @jreback this should be ready now, let me know if there is any other change needed. @datapythonista amazing this didn't need to be rebase, but can you merge master so the tests run again after @TomAugspurger convert patch. merge on green.