Pylon::Filesystem
stdlibs filesystem APIs (File, Dir, FileUtils) report failures (a vanished path,
permissions, a full disk) by throwing exceptions and rarely offer non-throwing variants.
We want to avoid exceptions as they can leave the application in undesirable states but also
make potential failures invisible to the type system. Here we effectively wrap those APIs
to explicitly handle the exceptions as they happen and convert them into values. This allows
us to encode the potential failures into the return type and force callers to handle them as
needed. A missing path is Missing where absence is actionable, everything else is a
Problem carrying the reason.