Expose callback for download progress
### Feature request

When using `AutoTokenizer` and `AutoModelForCausalLM`, I would like be able to pass a callback function (or some other solution) that will allow me to report on the status of the download if it's not cached.

```
AutoTokenizer.from_pretrained(
  model_name,
  download_progress_callback=lambda perc: print(f"Downloading tokenizer: {perc}%")
)
AutoModelForCausalLM.from_pretrained(
  model_name,
  download_progress_callback=lambda perc: print(f"Downloading model: {perc}%")
)
```

Ideally this would be the **total** download progress (achievable with the `file_metadata` flag of `HfApi.model_info`).

### Motivation

I am building a UI wrapper around hugging face models, and would like to enable a "on click" install for any model. The issue is it can take quite some time to download, and the UI is left spinning sometimes for hours. I would like to provide more feedback to the end user on the status (plus maybe some time estimations eventually)

### Your contribution

Happy to contribute in any way, however I'll need to be pointed in the right direction. I've taken a peruse through the `huggingface_hub` repo, as well as this one, but am a little unsure of how to approach this. In particular, I'm unsure how a model determines _which specific_ files to download from the hub.
This looks like a feature that would need to be implemented in `huggingface_hub` first, then we would use it here and pass along the proper argument.

cc @Wauplin and @LysandreJik <|||||>Hey @tristanMatthias :wave: This is a tricky feature request as I don't want to complexify too much the current API/implementation of the underlying methods to download files. It is quite unknown but in `snapshot_download` there is a [`tqdm_class: Optional[tqdm]`](https://huggingface.co/docs/huggingface_hub/v0.13.3/en/package_reference/file_download#huggingface_hub.snapshot_download.tqdm_class) parameter that can be passed. Instead of providing a callback, you overwrite completely the progress bar that is used. The passed class must inherit from `tqdm.auto.tqdm` or at least mimic its behavior. 

What we can do in `huggingface_hub` is to add this parameter to `hf_hub_download` as well. Then `transformers` would have to adapt its API. What do you think about it? If it fits your need, I can point you the code that needs to be updated in `hfh`.<|||||>This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.