Support DataLoader with num_workers > 0 in streaming mode
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/datasets/pr_4375). All of your documentation changes will be reflected on that endpoint.
Previously it was not possible to properly stream a dataset using multiple `torch.utils.data.DataLoader` workers:

- the `TorchIterableDataset` couldn't be pickled and passed to the subprocesses: https://github.com/huggingface/datasets/issues/3950
- streaming extension was failing: https://github.com/huggingface/datasets/issues/3951
- `fsspec` doesn't work out of the box in subprocesses

From https://github.com/fsspec/filesystem_spec/pull/963#issuecomment-1131709948 :
> Non-async instances might be safe in the forked child, if they hold no open files/sockets etc.; I'm not sure any implementations pass this test!
> If any async instance has been created, the newly forked processes must:
> 1. discard references to locks, threads and event loops and make new ones
> 2. not use any async fsspec instances from the parent process
> 3. clear all class instance caches

Therefore in a DataLoader's worker, I clear the clear the reference to the loop and thread (1). We should be fine for 2 and 3 already since we don't use class instances from the parent process.

Fix https://github.com/huggingface/datasets/issues/3950
Fix https://github.com/huggingface/datasets/issues/3951

TODO: fix tests