Clean the Trainer state
# What does this PR do?

This PRs clean the fields used inside the `Trainer` to store state and gather them all in a clear class named `TrainerState` that is typed so the user knows exactly what they can access when subclassing and overriding methods (and for my next step, when writing callbacks).

As a result, the `log_history` does not need to be saved and loaded separately and the hack to get the steps we were at from the checkpoint folder name is removed (the user can copy all the checkpoint saved by the `Trainer` in a previous training in any folder and use it for resuming training). This PRs adds a test of the full reproducibility of a training resumed from a checkpoint.

There is a tiny breaking change that would affect users that trained a model using an earlier version of transformers and would like to resume it with a version obtained after this commit but I don't think this matters much.

It also enforces that the `TrainingArguments` passed to a `Trainer` are not changed during training, to avoid subtle bugs when launching several trainings in a row. This is verified by a new test.
Tests pass in a multi-GPU environment and the specific `test_distributed_trainer` passes too. There is just one test that requires a batch size not too big so I manually skip it if there are more than 2 GPUs.<|||||>Nice PR!!!

I think it is a nice addition. Only the `global_step` won't be necessary as it is already integrated by default into the TF checkpoints. This is perfect!

I plan also to add Keras callbacks into the TF Trainer that can handles few more arguments that are in this "state" class such as best checkpoint, and metrics.

It won't change much in the TF Trainer and could be very easily integrated as most of the "state" arguments work the same way for both Trainers. We can clearly imagine this state class for a much broader usage.<|||||>Checked the tests on TPU are passing, so can safely merge this.