ENH: Implement to_iceberg
- [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.

Added the `append` parameter. I think it's a great addition, thanks for the feedback @IsaacWarren.

I was thinking that for the parameters that receive PyIceberg objects, one option is to use a generic `**kwargs` like `to_parquet` does, that are sent to the engine (only PyIceberg so far). This wouldn't directly expose PyIceberg details to our API and they could be supported. This would be very simple if only one method from PyIceberg received extra parameters. But there are a couple in `overwrite` where the same could be done, and that makes it a bit trickier. I think it's still best to leave this to a follow up PR, so it can be analyzed and discussed in greater detail. And even if it's done after this is released in 3.0, no big deal since there are no backward compatibility problems.