Save code of registered custom models
# What does this PR do?

This PR changes the way `save_pretrained` works for user custom objects when they are registered to an auto API via the the new command `register_for_auto_class`. Here is an example:

```py
# Custom config
from test_model.configuration import NewModelConfig
# Custom model
from test_model.modeling import NewModel

# No need to specify AutoConfig here, that's the default and the only auto class that makes sense for a config.
NewModelConfig.register_for_auto_class()
# AutoModel is also the default but we show it here as you could use an other auto model class.
NewModel.register_for_auto_class("AutoModel")

# Just an example of model definition
model = NewModel.from_pretrained("hf-internal-testing/tiny-bert")
model.save_pretrained("test-dynamic")
# Model weights, config and the files with the code of NewModel and NewModelConfig are copied in this folder
```

If the user pushes the folder to the Hub, anyone will then be able to use the Auto api to load this model and config (as long as they pass `trust_remote_code=True`.
_The documentation is not available anymore as the PR was closed or merged._