Add lock for queue based on mongodb
Example of usage:

```python
with lock(key=f"{job.type}--{job.dataset}", job_id=job.pk):
    ...
```
or
```python
try:
    lock(key=f"{job.type}--{job.dataset}", job_id=job.pk).acquire()
except TimeoutError:
    ...
```

### Implementation details

- I use the atomicity of `.update()` in mongoengine.
- I defined a new collection "locks" in the "queue" db
- I added created_at and updated_at in case we want to define a TTL for it later

Close https://github.com/huggingface/datasets-server/issues/1356
Add lock for queue based on mongodb: Example of usage:

```python
with lock(key=f"{job.type}--{job.dataset}", job_id=job.pk):
    ...
```
or
```python
try:
    lock(key=f"{job.type}--{job.dataset}", job_id=job.pk).acquire()
except TimeoutError:
    ...
```

### Implementation details

- I use the atomicity of `.update()` in mongoengine.
- I defined a new collection "locks" in the "queue" db
- I added created_at and updated_at in case we want to define a TTL for it later

Close https://github.com/huggingface/datasets-server/issues/1356