(maybe) redundant code in transformers/src/transformers/models/bert/
Hi,

I was looking at the BERT code and noticed that `BertOutput` and `BertSelfOutput` are almost the same, except for the `in_features` argument to `nn.Linear`?

https://github.com/huggingface/transformers/blob/92ce53aab859012f7714dae6d6fce7a7d701e75f/src/transformers/models/bert/modeling_bert.py#L376-L387

https://github.com/huggingface/transformers/blob/92ce53aab859012f7714dae6d6fce7a7d701e75f/src/transformers/models/bert/modeling_bert.py#L454-L465

I was wondering if there is a reason to have it in this way, instead of just one `Output` class accepting an `in_hidden_size` for when it needs to change.

Something like this:

```
class BertNewOutput(nn.Module):
    def __init__(self, config, in_hidden_size):
        super().__init__()
        self.dense = nn.Linear(in_hidden_size, config.hidden_size)
        ...
```

The pattern with `BertOutput` and `BertSelfOutput` is repeated in similar parts of the code such as in `src/transformers/models/bert/modeling_tf_bert.py` where 

https://github.com/huggingface/transformers/blob/92ce53aab859012f7714dae6d6fce7a7d701e75f/src/transformers/models/bert/modeling_tf_bert.py#L349

is the same code as in 

https://github.com/huggingface/transformers/blob/92ce53aab859012f7714dae6d6fce7a7d701e75f/src/transformers/models/bert/modeling_tf_bert.py#L427
Please use the [forums](https://discuss.huggingface.co/) for such questions as we keep issues for bugs and feature requests only.