[core] implement support for run-time dependency version checking
As discussed at https://github.com/huggingface/transformers/pull/8073#issuecomment-729181330 this PR:

* [x] adds mechanics for run-time dependency version checks (module with fixed and unversioned too)
* [x] adds thorough tests (this is where it's the easiest to see how things work)
* [x] creates one source for all dependency versions in setup.py - need to rerun setup.py on its update to re-generated  src/transformers/dependency_versions_table.py, which is then used by transformers
* [x] adds support and deploys python runtime version check
* [x] deploys runtime checks for versioned modules in setup.py's `install_requires` (i.e. must modules)
* [x] switches `examples/lightning_base.py` to a fatal-on-failure requirement check.
* [x] deploys the version lookup `setup.py`'s `extras` definitions and `install_requires`
* [x] adds new `Makefile` target `deps_table_update` that updates the dep table, and inserts it into `style/quality/fixup` targets so the sync shouldn't take too long if forgotten to be run explicitly

@sgugger, @LysandreJik, @patrickvonplaten, @thomwolf 

@sgugger, wrt your comment in your [announcement](https://discuss.huggingface.co/t/transformers-v4-0-0-announcement/1990/1)
> => Resulting breaking change: some people will have to install sentencepiece explicitly while they didn’t have to before with the command pip install transformers[sentencepiece].

After this PR, you can just `require_version("sentencepiece", "pip install transformers[sentencepiece]")` in the code that needs it at run-time. You can expand the hint (second arg) as you wish to be self-explanatory.<|||||>@LysandreJik and @sgugger - it's ready to merge whenever you have a chance to review. Thank you.

Probably it is best to merge post v4-release, in case I missed something.<|||||>Will do a final review tomorrow!