Add Apache TsFile packaged module and Time Series docs category

## What does this PR do?

Adds first-class support for the [Apache TsFile](https://tsfile.apache.org/)
columnar time-series format (used by [Apache IoTDB](https://iotdb.apache.org/)
and other time-series systems) to 🤗 Datasets, and surfaces time-series
datasets as a dedicated modality in the documentation sidebar.

Users can now do:

```py
from datasets import load_dataset

ds = load_dataset("tsfile", data_files="data/*.tsfile", split="train")
```

or rely on extension auto-detection:

```py
ds = load_dataset("data/*.tsfile", split="train")
```

## Why a dedicated builder?

Generic columnar formats (CSV / Parquet / HDF5) can technically store
time-series data, but they treat *time* as just another column. TsFile is
purpose-built around the **(table, device, field)** triple with chunk-level
time indices and time-series-specific encodings (delta-of-delta on
timestamps, GORILLA on slowly-varying floats), so range queries and device
pruning don't require scanning the whole file.

The new `tsfile` builder pushes selection down to the reader's metadata
layer instead of materializing-then-filtering.

## What's added

### 1. `tsfile` packaged module (tsfile)

Backed by `tsfile.TsFileDataFrame` (`tsfile>=2.2.1.dev4`). Each `.tsfile`
is loaded as a single Arrow table: a `timestamp` (int64) column followed
by one float64 column per selected logical timeseries.

Four complementary, mutually-aware ways to select series — all pushed
down to the metadata layer so unselected devices/fields are never decoded:

| Argument        | Behaviour                                                                 |
|-----------------|---------------------------------------------------------------------------|
| `columns=`      | Explicit list of logical series paths.                                    |
| `devices=`      | Keep listed device(s), across all their fields. Exact segment match.      |
| `fields=`       | Keep listed measurement(s), across all devices.                           |
| `path_prefix=`  | Delegated to `TsFileDataFrame.list_timeseries(path_prefix=...)`.          |

`devices=` and `fields=` combine as a logical AND. `columns=` is mutually
exclusive with the three predicate-based filters.

Plus:

- `start_time` / `end_time` — inclusive time-range filter pushed down to
  `df.loc[start:end, series]` (uses chunk-level time indices).
- `features` — optional cast to a user-provided `Features` schema.
- `on_bad_files` — `"error"` (default) / `"warn"` / `"skip"`, matching the
  Parquet / HDF5 builders.

Registered in `_PACKAGED_DATASETS_MODULES` and bound to the `.tsfile`
extension via `_EXTENSION_TO_MODULE`.

### 2. Tests (test_tsfile.py)

14 tests, gated by `pytest.importorskip("tsfile")`:

- config validation (`columns` vs predicate filters mutual exclusion)
- basic load + extension auto-detection
- `columns=` / `devices=` / `fields=` / `path_prefix=` individually
- combined `devices=` + `fields=` 2-D projection
- empty-result filters → informative `ValueError`
- `start_time` / `end_time` pruning
- `on_bad_files="skip"` skipping a corrupted shard
- explicit `features` cast

All 14 pass on the dev machine.

### 3. Documentation

- **New sidebar category "Time Series"** in _toctree.yml,
  alongside `Tabular` / `Audio` / `Vision` / `Text`. Currently the official
  docs file time-series under `Tabular`, which underplays its
  domain-specific concerns (timestamp axis, time-range pruning, per-device
  addressing).
- **New page timeseries_load.mdx** documenting the `tsfile`
  builder: data model, four series-selection paths, time-range pruning,
  bad-file handling, feature casting, and the table-model / numeric-only
  limitations of the underlying `TsFileDataFrame` API.
- **Cross-link** from loading.mdx (the generic loading
  reference) to the new guide, with a minimal example surfacing the
  device- and field-level filters.

## Known limitations (documented in the new page)

The current `tsfile.TsFileDataFrame` API:

- only supports the **table-model** TsFile (tree-only files cannot be
  loaded);
- only exposes **numeric** field types (`BOOLEAN`, `INT32`, `INT64`,
  `FLOAT`, `DOUBLE`, `TIMESTAMP`), unifying them to `float64`;
- silently skips non-numeric fields (`TEXT`, `STRING`, `BLOB`, `DATE`)
  during metadata discovery.

## Dependency note

`tsfile` is **not** added to setup.py `extras_require` in this PR:
the latest published version on PyPI is a dev pre-release
(`2.2.1.dev4`) whose own metadata pins `pyarrow<20`, which conflicts
with the version of pyarrow used by `datasets`. The builder lazy-imports
`tsfile` and the tests are gated by `pytest.importorskip`, so users opt
in by installing `tsfile` themselves. We can add a proper extra once a
stable `tsfile` release lands.

## Commits

1. **Add Apache TsFile packaged module** — builder, registration, tests.
2. **Add Time Series category and TsFile loading guide** — sidebar entry,
   new docs page, cross-link from `loading.mdx`.

## Checklist

- [x] `ruff check` passes
- [x] `ruff format --check` passes
- [x] `pytest tests/packaged_modules/test_tsfile.py` — 14 passed
- [x] No changes to existing builders / public API
```