Model templates overhaul
This is the first PR to make the model templates better. It improves the templates themselves, as well as the testing tools around them:

- Re-instantiates the tests in the CI, this time as a separate test.
- Respects the library style, and tests it. These tests ensure that the templates have not diverged from the code base, especially due to the `# Copied from ...`.
- Implements a decoder model, with support for cross attentions, to be used in the encoder-decoder framework.
- Implements the same decoder model in TensorFlow
- Implements multiple types of position embeddings, similarly to BERT.
- Tests every new feature.
- Tokenizer separation between slow and fast
- Soft dependency on `cookiecutter`
- Adds easily tweakable integration tests for both PyTorch and TensorFlow

Things left for overhaul 2 & 3:

- General tokenizer improvements, I'm not happy with their current state and it's not tested. I find it surprisingly difficult to have a template for a tokenizer that is general enough, so I'm probably going to try to cover as much possible use-cases as possible
- Encoder-decoder w/ @patrickvonplaten

Things to improve for this overhaul (1):

- Probably speeding up the model templates test. It's running on github actions right now, and it's quite slow (8 minutes) even though the downloads are cached. Possible options are
    - use CircleCI instead
    - Cache the whole environment
    - Probably others, thinking about it
- The test runs on each commit + when the branch is opened. That's unnecessary. 
Thank you all for your reviews. Will do the last changes and update from `LMHead` to `CausalLM`.

@jplu the GA machines are indeed less beefy than the CircleCI ones (and there's a reason for that, we pay CircleCI but not GA).<|||||>Closing PR and opening it again because the history is messed up.