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
```