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).