GPT2Tokenizer.save_pretrained does not work in v3.0.0
Author: hzhwcmhf
Pull request: no

# 🐛 Bug

## Information

I am using GPT2Tokenizer and try to save the information about the tokenizer.

In v2.7, I always do

```python
>>> from transformers import GPT2Tokenizer
>>> a = GPT2Tokenizer('./tests/dataloader/dummy_gpt2vocab/vocab.json', './tests/dataloader/dummy_gpt2vocab/merges.txt')
>>> a.save_pretrained("./")
('./vocab.json', './merges.txt', './special_tokens_map.json', './added_tokens.json')
```

And I found it doesn't work when I upgrade to 3.0.
```python
>>> from transformers import GPT2Tokenizer
>>> a = GPT2Tokenizer('./tests/dataloader/dummy_gpt2vocab/vocab.json', './tests/dataloader/dummy_gpt2vocab/merges.txt')
>>> a.save_pretrained("./")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\hzhwcmhf\anaconda3\envs\mix\lib\site-packages\transformers\tokenization_utils_base.py", line 1362, in save_pretrained
    f.write(json.dumps(tokenizer_config, ensure_ascii=False))
  File "C:\Users\hzhwcmhf\anaconda3\envs\mix\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\hzhwcmhf\anaconda3\envs\mix\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\hzhwcmhf\anaconda3\envs\mix\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\hzhwcmhf\anaconda3\envs\mix\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type AddedToken is not JSON serializable
>>> a.save_vocabulary("./")
('./vocab.json', './merges.txt')
```

I know there is ``save_vocabulary`` now, but has ``save_pretrained`` been removed and should not be used?
However, ``save_vocabulary`` does not save special tokens. So how can I save the whole information about the tokenizer.

## Environment info

- `transformers` version: 3.0.0
- Platform: Windows-10-10.0.18362-SP0
- Python version: 3.7.6
- PyTorch version (GPU?): 1.4.0 (True)
- Tensorflow version (GPU?): not installed (NA)
- Using GPU in script?: No
- Using distributed or parallel set-up in script?: No


Comments:
Hello! Do you mind giving me your tokenizers version?

It shouldn't fail like this, `save_pretrained` is still supported and the recommended way to save tokenizers.

``tokenizers-0.8.0rc4`` is installed when I use ``pip install transformers``.

Actually, I'm running a CI for my project. You can see more information here: https://travis-ci.com/github/thu-coai/cotk/builds/173607827

Hmm @mfuntowicz might have an idea about what's going on here?

The problem still exists in 3.0.1

@hzhwcmhf, I encounter the same issue while saving pretrained fast tokenizer based on `RobertaTokenizerFast`. 

This happens due to adding non-serializable `AddedToken` instances to `kwargs` and later `init_kwargs`: https://github.com/huggingface/transformers/blob/d6b0b9d451e7ffe0da72a5f532cc9bec1563e801/src/transformers/tokenization_roberta.py#L316
https://github.com/huggingface/transformers/blob/d6b0b9d451e7ffe0da72a5f532cc9bec1563e801/src/transformers/tokenization_roberta.py#L321

`AddedToken` instances appear in `init_kwargs` property which is used to build a `tokenizer_config` which in its turn is being serialized into a `tokenizer_config_file`:
https://github.com/huggingface/transformers/blob/d6b0b9d451e7ffe0da72a5f532cc9bec1563e801/src/transformers/tokenization_utils_base.py#L1355
https://github.com/huggingface/transformers/blob/d6b0b9d451e7ffe0da72a5f532cc9bec1563e801/src/transformers/tokenization_utils_base.py#L1362

Note, that `AddedToken` instances are properly serialized to `special_tokens_map_file`:
https://github.com/huggingface/transformers/blob/d6b0b9d451e7ffe0da72a5f532cc9bec1563e801/src/transformers/tokenization_utils_base.py#L1368

## Workaround
As a workaround you can inspect `tokenizer.init_kwargs` property and update all items which are not JSON serializable (i.e. not strings in this case) before saving a pretrained tokenizer.

```python
tokenizer = ...

init_kwargs = {}
for key, value in tokenizer.init_kwargs.items():
    if isinstance(value, AddedToken):
        init_kwargs[key] = str(value)
    else:
        init_kwargs[key] = value

tokenizer.init_kwargs = init_kwargs

tokenizer.save_pretrained(<path>)
```