[debug utils] activation/weights underflow/overflow detector
This PR came to be out of the overflow issue we have been dealing with in t5/mt5/gpt-neo due to bf16 pretrained models. This PR:

* adds a new file `debug_utils.py`
* adds new helper debug class `DebugUnderOverflow` and function `detect_overflow` for doing the same for any tensor variable (useful for detailed debug).
* extends `Trainer` to support `--debug underflow_overflow` which automatically activates this detector - no changes to the code required
* overloads the old `--debug` which for some reason was used for very specific tpu debug prints yet, so folding that feature into now multi-optional `--debug` (similar to `--sharded_ddp`). the old unqualified `--debug` is now specific `--debug tpu_metrics_debug`. I know it sort of breaks back-compat for `--debug`, but since it's debug it's hopefully OK. 
* creates a new doc `debugging.rst` - will add some more useful debug recipes into it later

I'm open to suggestions of different namings to all of the new things...

@LysandreJik, @sgugger 
> I haven't commented on each print statement, but they should use the logger maybe? 

I started with it first and then replaced with print, because we need all the horizontal space and the really busy long pre-amble is just getting in the way, IMHO. I also don't see what useful information it'd contribute because the tool raises an exception when it detects the problem. Finally, what if someone disabled the logger - it'd not be able to do its work then. Please correct me if I'm missing something.

> Also I think the `DebugActivationOverflow` should be documented in our internals API doc (since we tell people to use it in their own Trainers). `internal/trainer_utils` is probably the place for that.

Will do. Thank you for suggesting where to put it.

Converted to .rst - found this new tool https://github.com/miyakogi/m2r that did it well, just needed to clean up a weird quirk.
<|||||>All links have been added and tweaked the doc some more to improve readability.<|||||>OK, the original functionality has been expanded to include a lot more useful information. Please see the updated copious documentation both in the docstring and the user docs.

The main changes are that:
1. we now print each frame separately and include inputs/outputs/weights
2. there is a tracing mode which can easily trace any number of batches at will

I wasn't sure how I could integrate the new features into the limited `--debug underflow_overflow` interface as it now has 3 optional parameters. So for now these can be activated directly from the script. If you can think how I could make these work with ``TrainingArguments`` I'm all ears.

As this has changed a lot inside I'd appreciate another look from @sgugger and @LysandreJik - no rush please. And thank you!