ce53fa71

Fix watch crash on attachment in a nonexistent directory

## Summary of the bug

When an attachment's path points into a directory that does not exist (for example because of a typo, like `attach typo-dir/receipt.pdf` where `typo-dir/` doesn't exist), the `watch` feature crashes.

## The test that reproduces the bug

Added scenario `centjes-gen/test_resources/check/CE_MISSING_ATTACHMENT_NONEXISTENT_DIR.cent`:

```
2023-12-05
  + attach nonexistent-directory/example.pdf
```

This is picked up by the existing golden test in `centjes-gen/test/Centjes/Report/CheckSpec.hs`, which runs `doCompleteCheck` over every `.cent` scenario and asserts a graceful, golden-comparable error.

Before the fix, the test does not just fail — it throws:

```
.../nonexistent-directory: getDirectoryContents:openDirStream: does not exist (No such file or directory)
```

which is exactly the uncaught IO exception that crashes the watch loop.

## Root cause

In `centjes/src/Centjes/Report/Check.hs`, `checkAttachment` checks whether the attachment file exists with `doesFileExist`. When it does not exist, it tries to be helpful by listing the *parent directory* with `listDirRel (parent af)` to suggest similarly-named files. If the parent directory itself does not exist, `listDirRel` throws an `openDirStream: does not exist` IO exception.

The watch loop in `centjes/src/Centjes/Load.hs` (`loadWatchedModules`) only catches `ExitCode`, so this IO exception propagates and crashes the whole watch process.

## The fix

Wrap the directory listing in `forgivingAbsence` (from `Path.IO`, already used elsewhere in the codebase) so that a nonexistent parent directory simply yields no suggestions. The normal `CE_MISSING_ATTACHMENT` error is then reported as expected, and `watch` no longer crashes.

## Things to manually check

- Run `centjes watch` on a ledger with an attachment pointing into a nonexistent directory and confirm it now reports the missing-attachment error instead of crashing, and recovers once the typo is fixed.
- Confirm the missing-attachment error message still reads well when there are no similar-file hints (no parent directory to scan).