Fix memory regression in Seq2Seq example
# What does this PR do?

This PR fixes the memory regression introduced when putting the `Seq2SeqTrainer` inside the main library. The root of the memory regression comes from the fact that when doing label smoothing, we ended up computing the log softmax of the logits twice, once in the cross entropy loss, and a second time inside the label smoother.

To fix this, the loss computation needs to be entirely done inside the label smoother, so the labels must be extracted from the batch before being passed to the model. As a result, the `decoder_input_ids` must be computed in the `Seq2SeqDataCollator` and not the model for this to work. I've just reverted the code from #9343, I don't know if it actually matches what happens inside the models. Maybe we should have a method to compute those `decoder_input_ids` accessible from inside of those models, or a flag to tell them whether to compute the loss or not (in this case, computing the loss will not only be slower, it will also trigger back the memory regression).

The same fix will need to be applied to the `Seq2SeqDataCollator` now inside the library as well as the new `run_seq2seq` script, but I will do it once we have agreed on a long-term solution for the decoder input ids above.

Fixes #9261
I agree with Patrick here, the collator was added to encode the text and to prepare the `decoder_input_ids` and `labels`, replace pad with 100 etc. Now we could encode and prepare `labels` in datasets.map(...) so collator won't be needed anymore. 

The only thing we need IMO is to be able to prepare `decoder_input_ids` outside of the model for label smoothing as Sylvain said. Could we maybe make the add `shift_right` method to every s2s model to able to prepare the `decoder_input_ids` outside of the model ?<|||||>Note that this is fixing the old script with the old data collator. The new one will be fixed with the proper fix (once we agree on it and there seems to be a consensus on having a model with a `shift_right` method) but is still necessary to do dynamic padding. The `Dataset.map` method is very nice for static things but when you want to pad to the length of the biggest sample in the batch, you need a special data collator, especially if it has to pad special keys like `"labels"`, `"decoder_input_ids"`...

The old `Seq2SeqDataCollator` in the utils file will be removed in a couple of weeks when the new seq2seq example is perfectly running, so I think it's fine to merge the quick hack in the meantime :-)