EncoderDecoderModel's decoder gets unexpected use_cache argument
## Environment info

- `transformers` version: 4.5.1
- Platform: Linux-4.15.0-123-generic-x86_64-with-glibc2.10
- Python version: 3.8.8
- PyTorch version (GPU?): 1.8.1 (True)
- Tensorflow version (GPU?): not installed (NA)
- Using GPU in script?: No
- Using distributed or parallel set-up in script?: No

### Who can help

@patrickvonplaten, @patil-suraj I think you might have an idea on what went wrong.

## Information

EncoderDecoderModel internally calls decoder with use_cache parameter, which seems to be not define for a Bert decoder.

## To reproduce
I have bigger configs but the bug is still here with minimalistic configs:
```python
encoder_config = BertConfig()
encoder = BertModel(config=encoder_config)
decoder_config = BertConfig(is_decoder=True)
decoder = BertForMaskedLM(config=decoder_config)
model = EncoderDecoderModel(encoder=encoder, decoder=decoder)
input_ids = torch.ones(5, dtype=torch.long).unsqueeze(0)
model(input_ids=input_ids, decoder_input_ids=input_ids, labels=input_ids)
```
Outputs error from `/opt/conda/lib/python3.8/site-packages/transformers/models/encoder_decoder/modeling_encoder_decoder.py` at line 416 :
```
forward() got an unexpected keyword argument 'use_cache'
```

## Expected behavior

- Default Bert encoder and decoder can be stacked in an EncoderDecoderModel


Hi @biggoron 

`BertForMaskedLM` can't be used as a decoder, it's intended for masked LM. The `BertLMHeadModel` model should be used if you wan to use bert as a decoder. Also the right way to initialize the bert as decoder is as follows

```python
dec_config = BertConfig.from_pretrained("bert-base-uncased")
dec_config.add_cross_attentions = True # add cross attention if you want to use it in EncoderDecoderModel
dec_config.is_decoder = True
dec = BertLMHeadModel.from_pretrained("bert-base-uncased", config=dec_config)
```

or simply use the `from_encoder_decoder_pretrained` method which takes care of this.<|||||>Thanks a lot for your help, it is much clearer!