[testing] port test_trainer_distributed to distributed pytest + TestCasePlus enhancements
This PR:

* [x] ports `test_trainer_distributed` to run with pytest - it will skip if gpus < 2.

* [x] includes various improvements via refactoring now 3 use cases of distributed testing by extending `TestCasePlus` with a whole set of convenient features:

Feature 1: A set of fully resolved important file and dir path accessors.

In tests often we need to know where things are relative to the current test file, and it's not trivial since the test could be invoked from more than one directory or could reside in different sub-directories. This class solves this problem by sorting out all the basic paths and provides easy accessors to them:

* ``pathlib`` objects (all fully resolved):

   - ``test_file_path`` - the current test file path (=``__file__``)
   - ``test_file_dir`` - the directory containing the current test file
   - ``tests_dir`` - the directory of the ``tests`` test suite
   - ``examples_dir`` - the directory of the ``examples`` test suite
   - ``repo_root_dir`` - the directory of the repository
   - ``src_dir`` - the directory of ``src`` (i.e. where the ``transformers`` sub-dir resides)

* stringified paths - same as above but these return a string, rather than a ``pathlib`` object

   - ``test_file_path_str``
   - ``test_file_dir_str``
   - ``tests_dir_str``
   - ``examples_dir_str``
   - ``repo_root_dir_str``
   - ``src_dir_str``

Feature 2: Get a copy of the ``os.environ`` object that sets up ``PYTHONPATH``  correctly, depending on the test suite it's invoked from. This is useful for invoking external programs from the test suite - e.g. distributed training.

```
    def test_whatever(self):
        env = self.get_env()
        # now call the external program, passing ``env`` to it
```

All these are also documented in `testing.rst`.

Fixes: #8058

@sgugger, @LysandreJik, @sshleifer 

LGTM! cc @patrickvonplaten for awareness!