[WIP] Proposal for TF model outputs
This picks up on the work @thomwolf did on #5740 to have self-documented outputs in TensorFlow that are compatible with the AutoGraph system.
`TFModelOuput` subclasses `OrderedDict` while still being a dataclass, with some tweaks in the `post_init`:
- only the not-None attributes are set as values for the dictionary because tensorflow refuses None as outputs.
- a `TFModelOutput` can be instantiated with the regular keyword arguments but also with an iterator passed as the first argument (as a dict would) like @thomwolf suggested in #5740, with a fix to make sure the first input is not a tensor (because tensors are iterables).

This breaks two things for the TensorFlow side of the library:
1. when unpacking `outputs`, a slice needs to be used, otherwise the keys of the dictionary are returned, not the values:
```
loss, logits = outputs
```
will fail, it needs to be changed to
```
loss, logits = outputs[:2]
```
2. when loading and saving a model using `SavedModel`, the subclass is lost and the output becomes a regular dictionary (see the change in `test_keras_save_load`).

Apart from those, these model outputs are fully backward compatible (you can index with an int or a slice and get the same behavior as before).

If this is accepted, I would strongly recommend using the same base class for PyTorch model outputs, which would imply the breaking change number 1 but would have the added benefit of:
1. fixing the problem with `DataParallel`
2. have consistent outputs between TF and PyTorch.
Sadly changing the `__iter__` function does not work as it's used inside TensorFlow (specifically in `tensorflow/python/util/nest.py`).<|||||>Ok closing this prototype now that we have a way forward (see [the forum](https://discuss.huggingface.co/t/new-model-output-types/195/8)).