Rewrite push_to_hub to use upload_files
# What does this PR do?

As asked in #18299 this PR rewrites the `PushToHubMixin` completely to use `upload_file` behind the scenes. This is breaking since there is no more git repository involved, so while the user might have been left with a proper repository in the past, this is not the case anymore. The trade-off is that there is no need to clone anything now, so the upload should be faster.

Another breaking change is to default `use_temp_files` to None now, which then defaults to `True` if there is a local folder of the same name, `False` otherwise. This felt way more natural with this change, but we can discuss and revisit if needed. For the rest, normally backward compatibility is ensured with proper deprecation warnings when needed.

Using `push_to_hub=True` in `save_pretrained` is adapted to this rewrite but with 0 breaking change normally.

You can see in the tests how this simplifies a lot of things at the end of the day, so I'm quite happy with the final API.

Oh and one last change I made is to move the code specific to TensorFlow models in the TF modeling utils file.
_The documentation is not available anymore as the PR was closed or merged._