Add MarkupLM
# What does this PR do?

This PR implements the [MarkupLM](https://arxiv.org/abs/2110.08518) model by Microsoft Research.

MarkupLM is very similar to LayoutLM(v1), namely a Transformer encoder pre-trained on another domain than just text (HTML web pages). Similar to how LayoutLM adds additional embeddings for the layout information, MarkupLM adds additional embeddings for the XPATH information of nodes within an HTML string.

To do:

- [x] add soft dependency check for `MarkupLMFeatureExtractor`. cc @sgugger, will need some help here. New dummy objects probably need to be created for bs4 (Beautiful Soup 4). These currently make the entire CI fail :(
- [x] fix fast tokenizer
_The documentation is not available anymore as the PR was closed or merged._<|||||>Ok, so I added requires_backends("bs4"), however the dependency check is not working for me:

```
(env) niels@brutasse:~/python_projects/transformers$ python
Python 3.9.10 (main, Jan 25 2022, 09:49:28) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bs4
>>> from transformers.utils import is_bs4_available
>>> is_bs4_available()
False
```
The import check is defined as follows:

```
_bs4_available = importlib.util.find_spec("bs4") is not None
try:
    _bs4_version = importlib_metadata.version("bs4")
    logger.debug(f"Successfully imported bs4 version {_bs4_version}")
except importlib_metadata.PackageNotFoundError:
    _bs4_available = False
```<|||||>@sgugger I've addressed all your comments, feel free to approve :)