Add TrOCR + VisionEncoderDecoderModel
# What does this PR do?

This PR adds the [TrOCR models](https://github.com/microsoft/unilm/tree/6f60612e7cc86a2a1ae85c47231507a587ab4e01/trocr) by Microsoft, together with a new `VisionEncoderDecoderModel` class (which should be used in order to use TrOCR, as it consists of an image encoder and an autoregressive text decoder). This PR is very similar to #13186, it's just the vision counterpart. 

Here's how to use this model:

```
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
import requests
from PIL import Image

processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

url = "https://fki.tic.heia-fr.ch/static/img/a01-122-02.jpg"
image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values

generated_ids = model.generate(input_ids=pixel_values)
print(processor.batch_decode(generated_ids)[0])
```

There's also this Colab notebook for quick inference: https://colab.research.google.com/drive/1qCuqlqc4V9LZhPkxIi_XqCCTQrDhkmHi?usp=sharing

! A big disclaimer: the TrOCR models do not directly work on entire images of PDFs etc. They are trained on single-text-line images. One needs a text detector first, before applying TrOCR. TrOCR is a text recognition model, not a text detection model. One typically needs both in a sequence in order to extract all text from a given image.

## Important note:

The current design of the existing `EncoderDecoderModel`/`FlaxEncoderDecoderModel` is that, if the `hidden_size` of the encoder/decoder don't match, one creates a single projection layer to project the `encoder_hidden_states` to the same number of channels as the decoder. However, for TrOCR, this is not how it's done. Instead, one projects the `encoder_hidden_states` to the same dimension as the decoder when projecting to keys and values, in each decoder layer. Therefore, my proposal is to add an attribute to the config of the decoder called `encoder_hidden_size`, which, if specified, will be used in the `VisionEncoderDecoderModel` class to not project the encoder hidden states. Instead, it will be used when instantiating the key and value projection layers.

For consistency, we could also add this to the existing EncoderDecoderModel/FlaxEncoderDecoderModel. Also relevant for the FlaxVisionEncoderDecoderModel PR, see #13359.

## To do:

- [ ] currently you have to pass `input_ids=pixel_values` to the `generate` method, which is not ideal. I'm in favor of letting the generate method accept an argument called `inputs`, which can work with text, images, speech. Related to #13825.
- [ ] make sure all vision models accept `attention_mask` as input. Related to #13764. 




