Add SageMakerTrainer for model paralellism
# What does this PR do?

This PR adds a subclass of `Trainer` to use model parallelism in SageMaker. This new `Trainer` still retains all the functionality of the previous trainer (e.g. when not run in SageMaker it will work like the normal one) while automatically enabling model parallelism when an example script is launched via SageMaker with that option activated.

The easiest way to enable this in any example script is to replace the `Trainer` and `TrainingArguments` imports by:
```python
from transformers.sagemaker import SageMakerTrainingArguments as TrainingArguments, SageMakerTrainer as Trainer
```

Along the way, I had to refactor a few things in `Trainer` to make it easier to deal with stuff in the subclass (without having to rewrite the whole train method for instance), mainly the part that does the model wrapping. Also, there was a subtle bug coming from the fact SageMaker wrapper for the model for model parallelism changes the forward method of the model, so the `Trainer` will now store the arguments in the signature (in case that signature changes after wrapping the model).