a46856cb

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 1s 1s 1s 0s
Eval 0s 18s 18s 19s 0s
Build 18s 4m31s 7m20s 7m39s 2m48s
Suite 0s 4m50s 7m39s 7m39s 2m48s

Timeline

0s3m20s3m40s4m4m20s4m40s5m5m20s5m40s6m6m20s6m40s7m7m20s