[testing] a new TestCasePlus subclass + get_auto_remove_tmp_dir() 
Author: stas00
Pull request: yes

I present to you a new `TestCasePlus` class, which is an extension of `testutil.TestCase`. Currently it only has one extra feature, but I'm sure there will be more in the future, hence the more generic name.

So the intention was to provide:
- an easy way to create unique temp dirs in test modules and get them automatically removed at the end of the test, regardless of whether a test succeeded or not. 
- an easy way not to remove the temp dir for debug purposes
- provide a hardcoded temp dir for debug purposes (and secure so that `rm -r /something` won't happen)
- optionally, clean up the temp dir right away if a hardcoded path is provided

Some ideas were discussed here: https://github.com/huggingface/transformers/issues/6471

So this PR implements this feature and uses it in 2 test modules that currently don't have a complete solution, and removing much much code on the way. 

Usage:

Feature 1: Flexible auto-removable temp dirs which are guaranteed to get removed at the end of test.

In all the following scenarios the temp dir will be auto-removed at the end of test, unless `after=False`.

1. create a unique temp dir and delete it at the end, `tmp_dir` will contain the path to the created temp dir
```
def test_whatever(self):
    tmp_dir = self.get_auto_remove_tmp_dir()
```
2. create a temp dir of my choice and delete it at the end - useful for debug when you want to monitor a specific directory
```
def test_whatever(self):
    tmp_dir = self.get_auto_remove_tmp_dir(tmp_dir="./tmp/run/test")
```
or just:
```
    tmp_dir = self.get_auto_remove_tmp_dir("./tmp/run/test")
```

3. create a temp dir of my choice and do not delete it at the end - useful for when you want to look at the temp results
```
def test_whatever(self):
    tmp_dir = self.get_auto_remove_tmp_dir(tmp_dir="./tmp/run/test", after=False)
```
or just:
```
    tmp_dir = self.get_auto_remove_tmp_dir("./tmp/run/test", False)
```

4. create a temp dir of my choice and ensure to delete it right away - useful for when you disabled deletion in the previous test run and want to make sure the that tmp dir is empty before the new test is run
```
def test_whatever(self):
    tmp_dir = self.get_auto_remove_tmp_dir(tmp_dir="./tmp/run/test", before=True)
```

Note 1: In order to run the equivalent of `rm -r` safely, only subdirs of the project repository checkout are allowed if an explicit `tmp_dir` is used, so that by mistake no `/tmp` or similar important part of the filesystem will get nuked. i.e. please always pass paths that start with `./`

Note 2: Each test can register multiple temp dirs and they all will get auto-removed, unless requested otherwise.

So you can see from the 4 main possible scenarios, during debug one needs to tweak only one line of code.

There is only one small remaining deficiency: Since the temp dir is pre-created, the tests will not be able to test things like `--output_dir` creation in examples - i.e. the dir will already be there. So if needed, the code can be extended to have a flag to not create the dir, but only register it for deletion. Though it'd be tricky for when `tmp_dir` is not passed explicitly and we rely on `tempfile`- I guess it can create and immediately delete the temp dir and save and reuse its path - I don't know whether there might be a race condition here. But chances are that this is not really needed.

Thank you for reading. Ideas and suggestions for improvements are welcome.

@JetRunner, @LysandreJik, @sshleifer, @sgugger

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

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

```diff
@@            Coverage Diff             @@
##           master    #6494      +/-   ##
==========================================
+ Coverage   80.38%   80.55%   +0.17%     
==========================================
  Files         156      156              
  Lines       28058    28079      +21     
==========================================
+ Hits        22554    22619      +65     
+ Misses       5504     5460      -44     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/6494?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/trainer.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90cmFpbmVyLnB5) | `37.84% <0.00%> (ø)` | |
| [src/transformers/testing\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90ZXN0aW5nX3V0aWxzLnB5) | `48.80% <33.33%> (-3.13%)` | :arrow_down: |
| [src/transformers/modeling\_tf\_flaubert.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9mbGF1YmVydC5weQ==) | `24.53% <0.00%> (-63.81%)` | :arrow_down: |
| [src/transformers/pipelines.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9waXBlbGluZXMucHk=) | `79.69% <0.00%> (-0.26%)` | :arrow_down: |
| [src/transformers/modeling\_bert.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19iZXJ0LnB5) | `88.42% <0.00%> (+0.16%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_bert.py](https://codecov.io/gh/huggingface/transformers/pull/6494/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9iZXJ0LnB5) | `98.38% <0.00%> (+29.31%)` | :arrow_up: |

------

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