Generate: save generation config with the models' `.save_pretrained()`
# What does this PR do?

As originally discussed in #20388, this PR makes `model.save_pretrained()` also call `model.generation_config.save_pretrained()` if it is a generation-capable model (on all 3 frameworks).

It also adds a bunch of tests, namely:
- tests whether the generation config can be pushed to the hub
- tests whether `model.save_pretrained()` actually saves `generation_config.json` if it is a model that can generate (on all 3 frameworks)
_The documentation is not available anymore as the PR was closed or merged._