Fix llama tokenizer
# What does this PR do?
Draft but:
- Fixes the conversion script 
- update the llama default special tokens 
- fixed compatibility issues
- cleanup llama tokeniztion code
- add tests
_The documentation is not available anymore as the PR was closed or merged._<|||||>cc @Narsil for visibility! <|||||>This will need to wait for #22341 <|||||>Yes, on it! <|||||>Will finish this tomorrow!<|||||>Hi! Does this PR the decoding part of the tokenizer? Seems like it always prefixes the output with space.

For instance, `tokenizer.decode(1)` returns ` <s>`, <|||||>Yes, it does: `print(f'\'{tokenizer.decode(tokenizer.encode("Hello world"), skip_special_tokens = True)}\'',)` outputs `'Hello world'  😉 