PERF: sparse to_csv
Improves `NDFrame.to_csv` performance for sparse dataframe by casting to dense before initializing `DataFrameFormatter`. Results in many fewer calls to `to_native_types` which saves time. Added a new ASV benchmark based on the example provided by OP in #41023.

Benchmark results:
```
[100.00%] ··· io.csv.ToCSVSparse.time_sparse_to_dense_to_csv                                        1.16±0.02s       before           after         ratio
     [56d82a9b]       [945a3525]
     <main~1>         <main>
-       13.6±0.1s       1.22±0.04s     0.09  io.csv.ToCSVSparse.time_sparse_to_csv

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
```

- [x] closes #41023 (Replace xxxx with the GitHub issue number)
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Revised asv benchmarks (upstream/main vs pr) after moving materialization to the chunk level to preserve memory. Chunk-level materialization takes longer than all-at-once materialization but is still a significant improvement over upstream/main.

```
[100.00%] ··· io.csv.ToCSVSparse.time_sparse_to_dense_to_csv                                         87.2±3ms
       before           after         ratio
     [9c9789c5]       [6d092ee6]
     <main^2>         <main>
-         641±4ms          285±3ms     0.44  io.csv.ToCSVSparse.time_sparse_to_csv

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
``` Please don't wait for reviewers to resolve conversations This pull request is stale because it has been open for thirty days with no activity. Please [update](https://pandas.pydata.org/pandas-docs/stable/development/contributing.html#updating-your-pull-request) and respond to this comment if you're still interested in working on this. Thanks for the pull request, but it appears to have gone stale. If interested in continuing, please merge in the main branch, address any review comments and/or failing tests, and we can reopen.