Support for multiple configs in packaged modules via metadata yaml info
{'login': 'polinaeterna', 'id': 16348744, 'node_id': 'MDQ6VXNlcjE2MzQ4NzQ0', 'avatar_url': 'https://avatars.githubusercontent.com/u/16348744?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/polinaeterna', 'html_url': 'https://github.com/polinaeterna', 'followers_url': 'https://api.github.com/users/polinaeterna/followers', 'following_url': 'https://api.github.com/users/polinaeterna/following{/other_user}', 'gists_url': 'https://api.github.com/users/polinaeterna/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/polinaeterna/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/polinaeterna/subscriptions', 'organizations_url': 'https://api.github.com/users/polinaeterna/orgs', 'repos_url': 'https://api.github.com/users/polinaeterna/repos', 'events_url': 'https://api.github.com/users/polinaeterna/events{/privacy}', 'received_events_url': 'https://api.github.com/users/polinaeterna/received_events', 'type': 'User', 'site_admin': False}
[]
[]
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/datasets/pr_5331). All of your documentation changes will be reflected on that endpoint. feel free to merge `main` into your PR to fix the CI :)
will solve https://github.com/huggingface/datasets/issues/5209 and https://github.com/huggingface/datasets/issues/5151

Config parameters for packaged builders are parsed from `“configs_kwargs”` field in README.md file (separate firs-level field, not part of “dataset_info”), example:
```
---
dataset_info:
...
configs_kwargs:
  - config_name: v1
    data_dir: v1
    drop_labels: true
  - config_name: v2
    data_dir: v2
    drop_labels: false
```

I tried to align packaged builders with custom configs parsed from metadata with scripts dataset builder as much as possible. Their builders are [created dynamically](https://github.com/huggingface/datasets/pull/5331/files#diff-1c1756795b2b2ab54ea1dc9a51cc7daba4297baa6e813210556545e6ede1a172R156) and have `BUILDER_CONFIGS` attribute filled with BuilderConfig objects in the same way as for datasets with script.

## load_dataset
1. If there is single config in meta and it doesn’t have a name, the name becomes “default” (as we do for “dataset_info”), [example](https://huggingface.co/datasets/polinaeterna/audiofolder_one_default_config_in_metadata/blob/main/README.md):
```python
load_dataset("ds") == load_dataset("ds", "default")   # load with the params provided in metadata

load_dataset("ds", "random name")  # ValueError: BuilderConfig 'random_name' not found. Available: ['default']
```
2. If there is single config in metadata with `config_name` provided (it might happen for example after running `.push_to_hub` for a single config with custom name), [example](https://huggingface.co/datasets/polinaeterna/audiofolder_one_nondefault_config_in_metadata)
```python
load_dataset("ds", "custom")   # load with the params provided in meta

load_dataset("ds")  # ValueError: BuilderConfig 'default' not found. Available: ['custom']
```
3. If there are several configs in metadata with names [example](https://huggingface.co/datasets/polinaeterna/audiofolder_two_configs_in_metadata/blob/main/README.md)
```python
load_dataset("ds", "v1")  # load with "v1" params

load_dataset("ds", "v2")  # load with "v2" params

load_dataset("ds")  # ValueError: BuilderConfig 'default' not found. Available: ['v1', 'v2']

```
So currently parametrized packaged builders are "strict" and do not allow to pass configs that are not present in metadata (like in datasets with scripts). What do you think about that?

## dataset_name and cache
I decided that it’s reasonable to add a `dataset_name` attribute to `DatasetBuilder` class which would be equal to `name` for scripts dataset but reflect a real dataset name for packaged builders (last part of path/name from hub). This is mostly to reorganize cache structure (I believe we can do this in the major release?) because otherwise, with custom configs for packaged builders which were all stored in the same directory, i it was becoming a mess. And in general it makes much more sense like this, from datasets server perspective too, though it’s a breaking change 

So the cache dir has the following structure: `"{namespace__}<dataset_name>/<config_name>/<version>/<hash>/"` and arrow/parquet filenames are also `"<dataset_name>-<split>.arrow"`. 
For example `polinaeterna___audiofolder_two_configs_in_metadata/v1-5532fac9443ea252/0.0.0/6cbdd16f8688354c63b4e2a36e1585d05de285023ee6443ffd71c4182055c0fc/` for `polinaeterna/audiofolder_two_configs_in_metadata` Hub dataset, train arrow file is `audiofolder_two_configs_in_metadata-train.arrow`.

For script datasets it remains unchanged.


## push_to_hub
To support config with `push_to_hub`, when `config_name` is provided, the data is put under directory named as `config_name` and "configs_kwargs" field is added to README.md, with `data_dir=<config_name>` for a specified config, like:
```
dataset_info:
...
config_kwargs:
  - config_name: v1
    data_dir: v1
  - config_name: v2
    data_dir: v2
```
[example](https://huggingface.co/datasets/polinaeterna/push_custom_splits/blob/main/README.md).

When config is not provided (just `ds.push_to_hub`), `data_dir` is set to "./"
```
...
configs_kwargs:
  data_dir: ./
```
or if there are more configs:
```
config_kwargs:
  - config_name: default
    data_dir: ./
  - config_name: v1
    data_dir: v1
```
"dataset_info" is updated accordingly (new configs are added).
This shouldn't break anything I hope.

I'm not marking this PR as ready because I also need to add documentation and ideally more tests.
Pls let me know what you think and sorry for so many changes in a single PR... 

TODO:
- [x] cache dirs structure
- [x] push_to_hub - create dirs and meta
- [x] get_config_names
- [ ] docs
- [ ] more tests
- [ ] make --save_info not rewrite configs_kwargs in readme (update test cli util)
{'url': 'https://api.github.com/repos/huggingface/datasets/issues/5331/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}
{'url': 'https://api.github.com/repos/huggingface/datasets/pulls/5331', 'html_url': 'https://github.com/huggingface/datasets/pull/5331', 'diff_url': 'https://github.com/huggingface/datasets/pull/5331.diff', 'patch_url': 'https://github.com/huggingface/datasets/pull/5331.patch', 'merged_at': None}