Adding AutoTokenizer and AutoModel classes that automatically detect architecture - Clean up tokenizers
Author: thomwolf
Pull request: yes

As discussed in #890 

Classes that automatically detect the relevant model/config/tokenizer to instantiate based on the`pretrained_model_name_or_path` string provided to `AutoXXX.from_pretrained(pretrained_model_name_or_path)`.

Right now:
- `AutoConfig`
- `AutoTokenizer`
- `AutoModel` (bare models outputting hidden-states)

Missing:
- Tests
- Maybe a few other architectures beside raw models (`AutoModelWithLMHead`, `AutoModelForSequenceClassification`, `AutoModelForTokensClassification`, `AutoModelForQuestionAnswering`)
- Check if we can make hubconfs simpler to maintain using AutoModels.

Additional stuff:
- add a `unk_token` to GPT2 to fix #799
- clean up tokenizers and associated tests

Comments:
# [Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910?src=pr&el=h1) Report
> Merging [#910](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/pytorch-transformers/commit/46cc9dd2b51a152b2e262ec12e40dddd13235aba?src=pr&el=desc) will **increase** coverage by `0.17%`.
> The diff coverage is `91.29%`.

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

```diff
@@            Coverage Diff            @@
##           master    #910      +/-   ##
=========================================
+ Coverage   79.03%   79.2%   +0.17%     
=========================================
  Files          34      38       +4     
  Lines        6234    6396     +162     
=========================================
+ Hits         4927    5066     +139     
- Misses       1307    1330      +23
```


| [Impacted Files](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pytorch\_transformers/modeling\_transfo\_xl.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfdHJhbnNmb194bC5weQ==) | `57.53% <ø> (ø)` | :arrow_up: |
| [pytorch\_transformers/modeling\_gpt2.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfZ3B0Mi5weQ==) | `75.84% <ø> (ø)` | :arrow_up: |
| [pytorch\_transformers/modeling\_xlm.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfeGxtLnB5) | `86.66% <ø> (ø)` | :arrow_up: |
| [pytorch\_transformers/modeling\_bert.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfYmVydC5weQ==) | `87.98% <ø> (ø)` | :arrow_up: |
| [pytorch\_transformers/modeling\_openai.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfb3BlbmFpLnB5) | `74.76% <ø> (ø)` | :arrow_up: |
| [pytorch\_transformers/modeling\_xlnet.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfeGxuZXQucHk=) | `79.01% <ø> (ø)` | :arrow_up: |
| [...transformers/tests/tokenization\_transfo\_xl\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvdG9rZW5pemF0aW9uX3RyYW5zZm9feGxfdGVzdC5weQ==) | `96.96% <100%> (+0.54%)` | :arrow_up: |
| [...rch\_transformers/tests/tokenization\_openai\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvdG9rZW5pemF0aW9uX29wZW5haV90ZXN0LnB5) | `97.22% <100%> (+0.44%)` | :arrow_up: |
| [pytorch\_transformers/modeling\_utils.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfdXRpbHMucHk=) | `83.16% <100%> (-0.13%)` | :arrow_down: |
| [pytorch\_transformers/tokenization\_xlnet.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdG9rZW5pemF0aW9uX3hsbmV0LnB5) | `88.11% <100%> (ø)` | :arrow_up: |
| ... and [21 more](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910?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/910?src=pr&el=footer). Last update [46cc9dd...0b524b0](https://codecov.io/gh/huggingface/pytorch-transformers/pull/910?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).