TensorFlow 2.0 - Testing with a few Bert architectures
This PR tests how easy it would be to incorporate TF 2.0 models in the current library:
- adds a few models: `TFBertPreTrainedModel`, `TFBertModel`, `TFBertForPretraining`, `TFBertForMaskedLM`, `TFBertForNextSentencePrediction`,
- weights conversion script to convert the PyTorch weights (only the `bert-base-uncased` model is up on our AWS S3 bucket for the moment),
- a few tests.

The library is (very) slightly reorganized to allow for this, mostly by spinning configuration classes out of (PyTorch) modeling classes to allow reusability between PyTorch and TF 2.0 models.

With TF 2.0 Keras imperative interface and Eager, the workflow and models are suprisingly similar:
```python
import numpy
import torch
import tensorflow as tf
from pytorch_transformers import BertModel, TFBertModel, BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
pytorch_model = BertModel.from_pretrained('bert-base-uncased')
tf_model = TFBertModel.from_pretrained('bert-base-uncased')

text = "[CLS] Who was Jim Henson ? Jim [MASK] was a puppeteer [SEP]"
tokens = tokenizer.encode(text)

pytorch_inputs = torch.tensor([tokens])
tf_inputs = tf.constant([tokens])

with torch.no_grad():
    pytorch_outputs = pytorch_model(pytorch_inputs)

tf_output = tf_model(tf_inputs, training=False)

numpy.amax(numpy.abs(pytorch_outputs[0].numpy() - tf_output[0].numpy()))
# >>> 2.861023e-06 => we are good,  a few 1e-6 is the expected difference
# between TF and PT arising from internals computation ops
```

If you want to play with this, you can install from the `tf` branch like this:
- install TF 2.0: `pip install tensorflow==2.0.0-rc0`
- install pytorch-transformers from the `tf` branch: `pip install https://github.com/huggingface/pytorch-transformers/archive/tf.zip`
# [Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=h1) Report
> Merging [#1104](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/pytorch-transformers/commit/df9d6effae43e92761eb92540bc45fac846789ee?src=pr&el=desc) will **decrease** coverage by `0.49%`.
> The diff coverage is `81.56%`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=tree)

```diff
@@            Coverage Diff            @@
##           master    #1104     +/-   ##
=========================================
- Coverage   79.61%   79.12%   -0.5%     
=========================================
  Files          42       56     +14     
  Lines        6898     7654    +756     
=========================================
+ Hits         5492     6056    +564     
- Misses       1406     1598    +192
```


| [Impacted Files](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pytorch\_transformers/tests/modeling\_xlnet\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfeGxuZXRfdGVzdC5weQ==) | `95.91% <100%> (+0.02%)` | :arrow_up: |
| [pytorch\_transformers/modeling\_transfo\_xl.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfdHJhbnNmb194bC5weQ==) | `55.2% <100%> (-2.33%)` | :arrow_down: |
| [pytorch\_transformers/tests/modeling\_xlm\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfeGxtX3Rlc3QucHk=) | `71.2% <100%> (+0.23%)` | :arrow_up: |
| [pytorch\_transformers/modeling\_openai.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfb3BlbmFpLnB5) | `73.35% <100%> (-1.42%)` | :arrow_down: |
| [pytorch\_transformers/tests/modeling\_auto\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfYXV0b190ZXN0LnB5) | `96.15% <100%> (+0.15%)` | :arrow_up: |
| [pytorch\_transformers/tests/modeling\_gpt2\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfZ3B0Ml90ZXN0LnB5) | `85% <100%> (+0.78%)` | :arrow_up: |
| [pytorch\_transformers/tests/conftest.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvY29uZnRlc3QucHk=) | `91.66% <100%> (+1.66%)` | :arrow_up: |
| [pytorch\_transformers/modeling\_gpt2.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfZ3B0Mi5weQ==) | `74.74% <100%> (-1.1%)` | :arrow_down: |
| [pytorch\_transformers/modeling\_roberta.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfcm9iZXJ0YS5weQ==) | `75.45% <100%> (-0.44%)` | :arrow_down: |
| [pytorch\_transformers/modeling\_xlnet.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfeGxuZXQucHk=) | `78.04% <100%> (-0.98%)` | :arrow_down: |
| ... and [39 more](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=footer). Last update [df9d6ef...3231797](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1104?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
