Add check to verify existence of pad_token_id
Author: BramVanroy
Pull request: yes

In batch_encode_plus we have to ensure that the tokenizer has a pad_token_id so that, when padding, no None values are added as padding. That would happen with gpt2, openai, transfoxl.

closes https://github.com/huggingface/transformers/issues/2640

Comments:
Tests failed on loading the Bert Whole Word Masking model:


> OSError: Couldn't reach server at 'https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased-whole-word-masking-config.json' to download pretrained model configuration file.

Fetching that file from the browser does work, though.

# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2663?src=pr&el=h1) Report
> Merging [#2663](https://codecov.io/gh/huggingface/transformers/pull/2663?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/ea2600bd5f1d36f2fb61958be21db5b901e33884?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `100%`.

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

```diff
@@           Coverage Diff           @@
##           master    #2663   +/-   ##
=======================================
  Coverage   74.51%   74.51%           
=======================================
  Files          87       87           
  Lines       14920    14920           
=======================================
  Hits        11117    11117           
  Misses       3803     3803
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/2663?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/tokenization\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/2663/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fdXRpbHMucHk=) | `85.69% <100%> (ø)` | :arrow_up: |

------

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


Hi Bram, thanks for opening a pull request. The problem with this approach is that checking if the `pad_token_id` is `None` will print a warning: `Using pad_token, but it is not set yet.`

It would probably be annoying for the user to be facing that warning each time they call `batch_encode_plus`. I would argue using the private attribute `_pad_token` instead would be better, as it can be used for the same purpose without raising a warning.

> Hi Bram, thanks for opening a pull request. The problem with this approach is that checking if the `pad_token_id` is `None` will print a warning: `Using pad_token, but it is not set yet.`
> 
> It would probably be annoying for the user to be facing that warning each time they call `batch_encode_plus`. I would argue using the private attribute `_pad_token` instead would be better, as it can be used for the same purpose without raising a warning.

Ah, didn't know that. Thanks! I can make the changes tomorrow, but feel free to edit now if you want the changes faster. 

Great, thanks Bram !