Generate: TF contrastive search with XLA support
# What does this PR do?

Adds contrastive search to TF, with XLA support.

In essence, TF's contrastive search is very similar to PT's, adapted to the structure that is present in other TF XLA generation functions (i.e. has a dedicated function to loop over, a separate function to update `model_kwargs` when in XLA mode, ...). The most notable difference is how the best candidate token (and associated model variables) are gathered -- PT relies on slicing, which TF doesn't support, so a `tf.gather` alternative is used.

The exact same integration tests (with the same input, model, and outputs) were added whenever possible. Three integration tests were not added, which will be addressed in a follow-up PR:
1. [GPT-J](https://github.com/huggingface/transformers/blob/d447c460b16626c656e4d7a9425f648fe69517b3/tests/models/gptj/test_modeling_gptj.py#L577) -- PT's test runs at half precision, for which we don't have the same TF facilities
2. [OPT](https://github.com/huggingface/transformers/blob/d447c460b16626c656e4d7a9425f648fe69517b3/tests/models/opt/test_modeling_opt.py#L495) -- OPT is not XLA compatible atm (it runs, but the position embeddings are wrong with padded structures, so we get different outputs)
3. [T5](https://github.com/huggingface/transformers/blob/d447c460b16626c656e4d7a9425f648fe69517b3/tests/models/t5/test_modeling_t5.py#L1227) -- the model used for this test do not have TF weights
_The documentation is not available anymore as the PR was closed or merged._<|||||>(@Rocketknight1 is off, so I'm merging this to not slow down the corresponding blog post, which will contain TF examples thanks to this PR :D In any case, have a quick look when you're back, to ensure we kill any bad pattern before v4.25 gets released!)