Add heartbeat
Add heartbeat to workers.

It adds a `last_heartbeat` field to documents in the queue.

The field is not mandatory - it only appears for jobs that are or were running when a heartbeat happens (once per minute by default).

## Implementations details

I added a `WorkerExecutor` that runs the worker loop in a **subprocess**. This way the executor can have its own loop with a heartbeat.

The executor knows about the worker state by reading a JSON file when I store the state of the loop. This is helpful to know the ID of the current Job to update its last_heartbeat field. I used filelock to make sure there's no race conditions when reading/writing this file.

## TODO

- [x] fix merge conflicts
- [x] tests

related to https://github.com/huggingface/datasets-server/issues/741
Add heartbeat: Add heartbeat to workers.

It adds a `last_heartbeat` field to documents in the queue.

The field is not mandatory - it only appears for jobs that are or were running when a heartbeat happens (once per minute by default).

## Implementations details

I added a `WorkerExecutor` that runs the worker loop in a **subprocess**. This way the executor can have its own loop with a heartbeat.

The executor knows about the worker state by reading a JSON file when I store the state of the loop. This is helpful to know the ID of the current Job to update its last_heartbeat field. I used filelock to make sure there's no race conditions when reading/writing this file.

## TODO

- [x] fix merge conflicts
- [x] tests

related to https://github.com/huggingface/datasets-server/issues/741