Pass through Engine kwargs in ExcelWriter
State: closed

- [x] closes #43442 
- [x] closes #43440
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

This is the revised version of #42214. In fact, in xlsxwriter, all kwargs are passed like so:
```python
ExcelWriter("path_to_file.xlsx",engine="xlsxwriter",engine_kwargs={"options":{"nan_inf_to_errors":True}})
```
which then becomes internally:
```python
from xlsxwriter import Workbook
Workbook("path_to_file.xlsx",options={"nan_inf_to_errors":True})
```
so my initial fix was wrong in that sense, because I made `engine_kwargs` able to be passed in like this:
```python
ExcelWriter("path_to_file.xlsx",engine="xlsxwriter",engine_kwargs={"nan_inf_to_errors":True})
```
and the resulted internals:
```python
Workbook("pat_to_file.xlsx",{"nan_inf_to_errors":True})
```
so #42214 was actually wrong (we want users to actually pass in **kw**args. 

However, there was still the issue of #43442, where the following engines *do* have some options that were silently ignored:
* *openpyxl* can set `iso_dates` and `write_only`
* *xlwt* can set `style_compression` (not sure why anybody would want this, but people may)
* *xlsxwriter* has many `options`

so I added tests for that in `engine_kwargs`. 

Labels:
name: IO Excel
description: read_excel, to_excel

Comments:
I had 6 times in `python scripts/validate_docstrings.py pandas.ExcelWriter` that `ExcelWriter` is not defined So I changed those to `pd.ExcelWriter`.
Then that 
```python
>>> with pd.ExcelWriter(
    ...     "path_to_file.xlsx",
    ...     engine="openpyxl",
    ...     mode="a",
    ...     engine_kwargs={"keep_vba": True}
    ... ) as writer:
    ...     df.to_excel(writer)
```
had that `Sheet1` already exists, and `if_sheet_exists` is set to "error". I added `sheet_name="Sheet2`
so that is changed, but I think this is a bit weird, and does not add to simplicity of the example.
and twice that I forgot a space after colon
Now only 'error' is that there is no "See Also" section, but I think that should pass?
Thanks @Joeperdefloep and apologies for the delay. Docs look good (addition of `pd.` is on master now as well). Looks like there is one failure that is related:

> FAILED pandas/tests/io/excel/test_openpyxl.py::test_engine_kwargs_append[.xlsx]

@Joeperdefloep can you merge master and fixup according to @rhshadrach comments
@Joeperdefloep @alimcmaster1 I am willing to finish this one up, if you guys don't have the time, since we need this in some of our projects.
> Thanks @Joeperdefloep and apologies for the delay. Docs look good (addition of `pd.` is on master now as well). Looks like there is one failure that is related:
> 
> > FAILED pandas/tests/io/excel/test_openpyxl.py::test_engine_kwargs_append[.xlsx]

Hello everyone. Apologies for the delays

That's funny... It passed on my machine.... This is the error:
```
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\VSSADM~1\\AppData\\Local\\Temp\\wrE4sPxHRxGbeUSKoQgfnJd1mC0iTd.xlsx'
```
I just changed the tests. Should be good now. ARM seems to be failing, but that is quite the black box to me...

I now get a lot of the following errors:
```
AttributeError: module 'aiobotocore' has no attribute 'AioSession'
```

seems to be related to this issue:
https://github.com/dask/s3fs/issues/514
@jreback friendly ping :)
thanks @Joeperdefloep very nice!