[PushToHub] Make it possible to upload folders
# What does this PR do?

For some models, it may be that we have several files with the same name, e.g. for the new InstructBLIP model (#23460), the processor consists of 2 tokenizers (because the model internally uses 2 different text models). Both of these tokenizers require files with the same name, like `tokenizer_config.json`.

Hence, it would be nice to create subfolders in the model repos to store for instance all files of one particular tokenizer (similar to how the Diffusers library does this). For InstructBLIP, I created a separate `qformer_tokenizer` folder for this as can be seen [here](https://huggingface.co/nielsr/instructblip-vicuna-7b/tree/main). I had to adapt the `save_pretrained` and `from_pretrained` methods of `InstructBlipProcessor` to save the files to a separate "qformer_tokenizer" folder, and read them back in. I guess those are very specific to InstructBLIP given that the name of the folder is pretty custom.

However, `push_to_hub` currently doesn't support uploading folders with files. This PR adds this functionality.
_The documentation is not available anymore as the PR was closed or merged._