Trainer should not modify its TrainingArguments
# What does this PR do?

This fixes a bug that took me some time to track in a notebook with several trainings. The bottom line is that `Trainer` should not modify its `TrainingArguments` so this fixes that part by saving the number of `max_steps` desired in the state instead of in the args. Also storing the number of training epochs for easy access in subclasses.
Shouldn't we have a properly-typed self.state on the Trainer instance? I always find assigning instance properties within the code a bit messy<|||||>We can put everything in the new `TrainerState`. I just did the same as for `self.epoch` or `self.global_step` (and there are plenty more).<|||||>Yes I think that’d be nice <|||||>Closing this PR as this will require a bit more work then :-)