Upstream (and rename) sortish sampler
# What does this PR do?

This PR moves the logic of the "sortish sampler" from examples/seq2seq utils to `trainer_pt_utils` to make this behavior available for all types of training in the main `Trainer`. It also fixes a bug in the previous implementation of the distributed sortish sampler that did not synchronize the random generator used for the shuffling (thus the data returned on the two processes joined together was not a permutation of the whole dataset).

The sortish sampler logic is to group items of the training datasets that have similar lengths together to minimize padding while retaining a bit of randomness. It does some sorting for this, but that's not the main feature, and it's unclear for anyone reading it what it might do, so the argument name was badly chose in my opinion. I chose to name it `group_by_length` when introducing it in `TrainingArguments` (while keeping the old `sortish_sampler` argument in `Seq2SeqTrainingArguments` for backward compatibility, for now).

The actual samplers are given by the two introduced classes `LengthGroupedSampler` and `DistributedLengthGroupedSampler`. They are both tested in the test, and in particular, the distributed one has a test it is using the same random generator for the bit of randomness.

Renaming the old `sortish_sampler` arg is just done in the tests of seq2seq examples for now, it will be done more generally when the seq2seq finetuning script is rewritten to use `datasets`.