TF PushToHubCallback fixes and updates
We had a couple of reports of slowdown and hanging with the `PushToHubCallback`. In particular, when training finished, there was a very long wait for the last training checkpoint to be pushed before the end-of-training commit could start, which sometimes seemed like it had hung completely. As a workaround, the end-of-training push now cancels any previous pushes with `terminate()` (thanks @LysandreJik!) before it starts, to save time and avoid this problem. This works well in testing.

However, there is a secondary problem - when we do an end-of-training push, we probably don't want to save a whole checkpoint with things like optimizer state, as they can be very large. Right now the `PushToHubCallback` does not delete checkpoint data in the output dir when it pushes at the end of training, and also does not squash commits (so if it cancels a checkpoint push and then starts the end-of-training push, it has to push the commit that includes the checkpoint data even if it's been deleted in the end-of-training commit).

I think we should definitely delete the checkpoint data in the final push, and possibly also squash commits to make the upload a lot faster (and reduce the size of the target repo). I can make these changes in this PR - WDYT?

CC: @merveenoyan 
_The documentation is not available anymore as the PR was closed or merged._<|||||>Will do!