[trainer] add main_process_first context manager
This PR 
- [x] implements `main_process_first` context manager as discussed in https://github.com/huggingface/transformers/issues/12345
This make the `datasets` pre-processing much faster in the distributed environment as only one process is doing it and not all replicas too at once.
- [x] modifies `run_translation.py` example to use it as a model.
- [x] starts using `log.debug` - since now we have the new shiny `--log_level` trainer arg, so many too-much-information `log.info` can be switched to `log.debug`, and the user can run `--log_level debug` to generate a lot more info when debugging or when filing a bug report.

**Question: not sure what should be done on multi-node setups, since one may or may not use a shared filesystem.**

TODO:
- once merged replicate to other examples

**Kudos for the cool function name goes to @sgugger** 

Fixes: https://github.com/huggingface/transformers/issues/12345

@sgugger 

So I won't lose it a magic perl to rewrite all other examples:

```
find examples -type f -exec perl -0777 -pi -e 's|^(\s+)(train_dataset = train_dataset.map\(.*?\))|x($1, $2)|msge; BEGIN {sub x {($p, $t) = @_ ; $t =~ s/^/    /msg; return qq[${p}with training_args.main_process_first(desc="train dataset map pre-processing"):\n$p$t] } }' {} \;
```