Generate: add model class validation
# What does this PR do?

Fixes #18210 

This PR adds model class validation at the start of generate (all model classes inherit `GenerationMixin`, but few can use `generate()`). It also adds an exception that attempts to redirect the users to the right classes.
_The documentation is not available anymore as the PR was closed or merged._<|||||>@sgugger @patrickvonplaten I've requested a re-review of this PR. As per @patrickvonplaten's suggestion, the PR was upgraded to contain the exact class the user should use in the exception (as opposed to pointing to all generate-compatible auto classes).

In the process of building it, I've noticed that the previous version of this PR was incorrect anyways -- PT and TF had a default `prepare_inputs_for_generation`, so we couldn't rely on its existence. Only 1 model was using this default, so I removed it and implemented it in the missing model. The default `prepare_inputs_for_generation` was a public method, but since this PR blocks the use of `generate()` with classes that are not intended to be used with it anyways, removing the public method should have little impact. Nevertheless, it is a point to consider in the review!

_______________________________

Here's an example with the current version of the PR:
```
>>> from transformers import AutoModel
>>> model = AutoModel.from_pretrained("distilgpt2")
>>> model.generate("foo")
TypeError: The current model class (GPT2Model) is not compatible with `.generate()`, as it doesn't have a language model head. Please use one of the following classes instead: {'GPT2LMHeadModel'}
```