8c98d369

Let a scenario carry whether it is a file or a directory

`scenarioDir`, `scenarioDirRecur` and `scenarioDirOfDirs` took a `FilePath` and handed the callback a `FilePath`, so the one thing a caller has to know about a scenario, whether it is a file or a directory, was the one thing the type would not tell them. `scenarioDirOfDirs` handing out a directory and `scenarioDir` handing out a file had the same signature.

They now take a `Path b Dir` and hand over a `Path b File` or a `Path b Dir`.

## The base is the caller's

`Path b Dir` rather than `Path Rel Dir`, so that:

- a relative directory names its scenarios relative to the working directory, which is what the `FilePath` version did and what the doc examples rely on;
- a scenario run over a `withSystemTempDir` still works with the absolute path it hands you, which is what this repository's own `ScenarioSpec` does.

Pinning the input to `Path Rel Dir` would have read more strictly and broken the second one.

## Breaking

The signatures changed rather than gaining typed siblings, so this is a major bump to 0.30.0.0. Call sites pass `[reldir|test_resources/scenarios|]` where they passed `"test_resources/scenarios"`, and reach for `fromRelFile` where they used the scenario as a `FilePath`.

Test descriptions are unchanged, separator and all, so a `--filter` over them still selects the same tests.

## What it bought

`sydtest-test` no longer depends on `filepath`. Joining a scenario directory to a file inside it was the only thing it wanted `System.FilePath` for, and `Path`'s own `</>` does that with the types lined up.

## Review loop

```
nix build .#checks.x86_64-linux.release
```

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 1m10s 1m10s 1m10s 0s
Eval 1m10s 1m15s 1m15s 2m26s 0s
Build 2m25s 7m22s 8m39s 11m05s 1m16s
Suite 0s 9m48s 11m05s 11m05s 1m16s

Timeline

0s1m2m4m5m6m7m8m9m10m11m