Better dummies
# What does this PR do?

This PR reworks how the dummy objects work by using a metaclass to build them, and make sure that any classmethod used will raise the appropriate error message.

Fixes the bad error message when trying to do something like:
```python
FlaxVisionEncoderDecoderModel.from_encoder_decoder_pretrained("vit", "gpt2")
```
with Flax not installed.
Yes, it will send the imprt error for any attribute, but at the same time the object should just not be used if the right frameworks are not installed.<|||||>Failure is non-related so merging.