Improve BERT-like models performance with better self attention
# What does this PR do?

This PR updates the way we implement the self attention layers in order to be aligned on the original BERT performance. Small breaking change, this improvement needs at least TF 2.3. This change has already been discussed with @thomwolf, and he agreed. But still needs the approval of @LysandreJik @patrickvonplaten and @sgugger 

@patrickvonplaten I have removed the comment for `check_copies` in the Longformer model because I don't know enough this model to apply the proper changes, I will apply this update to one model by one model for the ones I know but can you take this one?

@jlei2 as I'm on Windows, unfortunately the GPU profiling is not yet available in WSL, can you clone this branch and be sure that everythings works like expected with your benchmark? Thanks!!

Fixes # (issue)

#6771 

A Python profiling call gives the following improvements:
```
model = TFBertModel.from_pretrained("bert-base-cased")

# With the improvements
cProfile.run("model(model.dummy_inputs)") 
54591 function calls (53774 primitive calls) in 0.064 seconds

# Currently on master
cProfile.run("model(model.dummy_inputs)")
76166 function calls (75204 primitive calls) in 0.095 seconds
```<|||||>Thanks @patrickvonplaten !!

1. Slow tests are passing for these models
2. I confirm that "Old" pre-trained models `tf_model.h5` files that were saved with tf < 2.3 can be loaded into the new layer design

I haven't tested the tf1 models, you mean testing the `load_tf_weights_in_bert` in the `modeling_bert.py` file?<|||||>@jlei2 has confirmed that now everything works as expected in the profiler and benchmark 👍 https://github.com/huggingface/transformers/issues/6771#issuecomment-745786314<|||||>> 2\. "Old" pre-trained models `tf_model.h5` files that were saved with tf < 2.3 can be loaded into the new layer des

Yeah I mean loading a  tf `.ckpt` file using the `from_pretrained(...)` method. The `from_pretrained(...)` method automatically uses the correct functions to load `.ckpt`. I think the easiest way would be to download one of the zips of the official google bert: https://github.com/google-research/bert#bert and quickly check that it can be loaded and that the output on this branch and on master is the same.<|||||>> > 2. "Old" pre-trained models `tf_model.h5` files that were saved with tf < 2.3 can be loaded into the new layer des
> 
> Yeah I mean loading a tf `.ckpt` file using the `from_pretrained(...)` method. The `from_pretrained(...)` method automatically uses the correct functions to load `.ckpt`. I think the easiest way would be to download one of the zips of the official google bert: https://github.com/google-research/bert#bert and quickly check that it can be loaded and that the output on this branch and on master is the same.

Ok as discussed offline TF1 checkpoints cannot even be loaded into TF2 at the moment (only if one goes through PT), so this PR is good to go for me!