The web interface allows working with the file system cluster using
basic HTTP requests. There are many ways to interface with a file system
using HTTP (like WebDAV), but for the firsts versions of ToastyFS I
opted for some custom minimal semantics. Here are they.

GET
    If the path refers to a directory, the listing of its direct children
    is returned as a newline-separated list of relative paths. Children
    that are directories have ending slashes, while files don't:

        image.jpg
        Documents/
        notes.txt

    If the path refers to a file, its contents are returned. Note that
    Range requests are not supported.

    Returns 200 on success, 404 if the file/directory doesn't exist, else 5xx.

HEAD
    Works like GET but doesn't return the content (The Content-Length is
    set as if the payload was being send).

PUT
    The server considers the resource being uploaded as a directory if the
    path ends with a slash, and as a file otherwise:

        photos/     directory
        image.jpg   file

    If the path refers to a directory and no file/directory exists at that
    path, a new one is created and status 201 is returned. If a directory
    existd already, statis 204 is returned. If a file existed already status
    ??? (TODO) is returned. If the payload the request is not empty, the
    operation fails with code 400.

    If the path refers to a file, the file is automatically created if it
    doesn't exist, then the specified contents are written to it, replacing
    the entire file content (HTTP PUT semantics). This is implemented using
    two flags:
    - TOASTY_WRITE_CREATE_IF_MISSING: Creates file if it doesn't exist
    - TOASTY_WRITE_TRUNCATE_AFTER: Truncates file after the write, discarding
      any data beyond the uploaded content
    Files are created with a default chunk size of 4096 bytes.

    If a file or directory already existed at that path, it is overwritten
    unless the header "X-ToastyFS-Overwrite: no" is sent.
    (TODO error codes)

DELETE
    Deletes the given file or directory. Returns 204 on success, 404 if
    no file or directory existed at that path, else returns 5xx.

-----------
cases:
    PUT file / unused path -> OK
    PUT file / file exists -> overwrite?
    PUT file / directory exists
    PUT directory / unused path -> OK
    PUT directory / file exists
    PUT directory / directory exists

Idea: Use patch on the parent directory to rename
-----------
