Add head_mask/decoder_head_mask for BART
This PR implement `head_mask` and `decoder_head_mask` for PyTorch BART-based models. The full list, please, see below:
- **BART**
- **MBart**
- **Blenderbot**
- **BlenderbotSmall**
- **Marian**
- **Pegasus**

This PR is a follow up on the closed PR #9404.

**Motivation**:
According to HuggingFace's websites "There is a growing field of study concerned with investigating the inner working of large-scale transformers like BERT (that some call “BERTology”)." This PR enables to mask attention heads in encoder and decoder models exactly like for BERT. This PR thus creates an opportunity to study the importance of attention heads in encoder-decoder BERT-like model.


**Description**
- New arguments `head_mask` and`decoder_head_mask` are passed to all the BART-based models `...Model`, `...ForConditionalGeneration` and `...ForQuestionAnswering` after four arguments `input_ids, attention_mask, decoder_input_ids, decoder_attention_mask` so that a testing and whole pipeline remains smooth.

- This PR also contains updated `test_headmasking`, which currently works fine with one problem - BART-based models do not satisfy a condition:
```
self.assertNotEqual(attentions[1][..., 0, :, :].flatten().sum().item(), 0.0).

```
Fixing this problem is currently underway. 

**Reviewer:** @patrickvonplaten 
Thanks for opening a new PR. Let me know if you need a review (It's also ok if I go into the PR and fix some things if your stuck :-) )<|||||>@patrickvonplaten I hope this PR is again ready for review. The only thing remaining to resolve is that issue in `test_headmasking` described above. Currently, I've been trying to fix this one, but I'll be grateful for sure if you can have a look at that too :)<|||||>Hey @patrickvonplaten. I would like to inform you I fixed `test_headmasking` for BART-based. The problem was that code inside
```
self.assertNotEqual(attentions[1][..., 0, :, :].flatten().sum().item(), 0.0)
```
pointed to the last layer of encoder/decoder (encoder-decoder models have only 2 layers in each module while BERT has 5 layers during testing). At the end of the day, this condition was invalid for BART-based models considering the `head_mask` to be
```
head_mask = torch.ones(
    self.model_tester.num_hidden_layers,
    self.model_tester.num_attention_heads,
    device=torch_device,
)
head_mask[0, 0] = 0
head_mask[-1, :-1] = 0
```

I hope this PR is then ready for review.