TF Sharded
# What does this PR do?

Introduces the sharding of TF models following the pytroch implementation. 

A simple working example is the following : 

```python 
from transformers import TFOPTModel
save_directory = "opt-350m"
model = TFOPTModel.from_pretrained("facebook/opt-350m")
model.save_pretrained(save_directory, max_shard_size = "1GB")
tf_model = TFOPTModel.from_pretrained(save_directory)
```

_The documentation is not available anymore as the PR was closed or merged._<|||||>Okay so the tfopt_for_causal_lm/tfopt_model 
prefix  from the tfopt_for_causal_lm/model/decoder/embed_positions/weight:0 in the index json comes from the actual name of the layer (so tf side). This also creates the hack that we sometime need when some layer is shared : for OPT we have the following : 'decoder.embed_tokens/model.decoder.embed_tokens/weight:0' which thus becomes model.decoder.embed_tokens/weight:0  . Most interesting part is that the ‘decoder.embed_tokens’ comes from https://github.com/ArthurZucker/transformers/blob/e950ff48a91840e30966abaf86bdb02dc16fcdab/src/transformers/models/opt/modeling_tf_opt.py#L499-L511 (the load weight prefix hack using load_weight_prefix) I am sure that there is something to do about that so I will detail that and dig a bit further<|||||>Looks very nice to me!

Only did a very high-level review. Defering to @gante and @sgugger here :-)