[WIP] Add a trainer tool class to make the TF2 model training easier
Hello,

I decided to open a cleaner PR because the other was a bit too messy in my opinion. Here the features that this Trainer class will be able to handle:

- [x] Single / Multiple GPU training. Distributed is across GPUs in the same host. Distribution across multiple machines will be for a future version.
- [ ] The training can be configured with a JSON file.
- [x] Handle multiple data processor to be able to train a model over different datasets.
- [x] Select and configure a specific loss/optimizer for a training
- [x] Create multiple checkpoints during the training in order to make it fault-tolerant.
- [x] Create the logs to be able to visualize the training in Tensorboard
- [x] The final model is saved in Hugging face transformer format and in TF saved model
- [x] Able to give a data directory where to find the datasets
- [x] Automatically handle dataset/model caching
- [ ] Run an evaluation over a test dataset with proper printed results such as the one proposed by the `seqeval` package

Currently the trainer class can be used over glue and xnli datasets with the available examples `examples/run_tf_xnli_with_trainer.py` and `examples/run_tf_glue_with_trainer.py`. I will add new examples for differents tasks and datasets.

The list of features above will be checked as things progress.

Ping @julien-c @LysandreJik @thomwolf : Do not hesitate to make proposals if you have new ideas of features or advices on a better implementation of this trainer.