Generate - add beam indices output in contrained beam search
# What does this PR do?

Fixes #25000

This PR adds the `beam_indices` output to constrained beam search, just like in the other beam methods. The changes are (mostly) copy-paste from beam search, and they pipe `beam_indices` all the way to the output.

Script for reproducibility (didn't work before, works after these changes)
```py
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2").to('cuda')

prompt = """Tell me some about Canada"""
input_tokenized_info = tokenizer(prompt, return_tensors="pt")
input_ids, attention_mask = input_tokenized_info['input_ids'], input_tokenized_info[ 'attention_mask']
input_ids = input_ids.to('cuda')
attention_mask = attention_mask.to('cuda')
force_words = ["Canada"]
force_words_ids = tokenizer(force_words, add_special_tokens=False).input_ids
outputs = model.generate(input_ids=input_ids, attention_mask=attention_mask,num_beams =4,max_new_tokens=10, return_dict_in_generate=True,output_scores=True, force_words_ids=force_words_ids)
print(outputs.beam_indices)
# Before: `None`
# After: `tensor([[ 0,  1,  1,  1,  0,  0,  2,  3,  3,  1, -1, -1, -1, -1, -1]], device='cuda:0')`
```
_The documentation is not available anymore as the PR was closed or merged._