PERF: cache plotting date locators for DatetimeIndex plotting
- [x] closes #57035 (Replace xxxx with the GitHub issue number)

Using the last plotting example from the issue

```python
In [1]: import time
   ...: import pandas as pd
   ...: import matplotlib.pyplot as plt

In [2]: ts_index = pd.date_range('2020-01-01 00:00', periods=500_000, freq='10min')
   ...: 
   ...: s_a = pd.Series(data=1, index=ts_index)
   ...: s_b = pd.Series(data=2, index=ts_index)

In [3]: fig, ax = plt.subplots()
   ...: t_s4 = time.time()
   ...: s_a.plot(ax=ax)
   ...: print("Time elapsed Series.plot() on existing plt axis without matplotlib line plot: "
   ...:       f"{(time.time()-t_s4):.2f} seconds")
Time elapsed Series.plot() on existing plt axis without matplotlib line plot: 8.96 seconds  # main
Time elapsed Series.plot() on existing plt axis without matplotlib line plot: 1.34 seconds  # PR
```

Nice! Thanks @mroeschke  A slightly late comment: doing the caching this way means multiple axes may share the same result.  I have not chased through but I am not 100% sure that the returned object is not mutable (so you are opening up a bunch of spooky action-at-a-distance bugs).

It may be be better to do the caching on a per-converter basis.

I am a bit curious why mpl is calling `_get_default_locs` many times though...