Handle POST to /data/fs/[path]

Each line of the body is submitted to MongoDB as a "save" (which is effectively update/insert).

Given the MongoDB model, this actually supports creating a new collection, saving new documents to an existing collection, and updating existing documents (see the README).

All lines are parsed before any data is saved, so nothing is changed if the input is bad. However, partial writes can occur if the MongoDB driver gives an error.

Also added a command `save [path] [object]` to the REPL, and made the `ls` and `cd` commands actually work, for the most part.
Oops, I realize I was discussing what happens at the API level, not the `FileSystem` level.

I think for the write/overwrite/save method (used by HTTP PUT), it either succeeds or fails, so probably `Task[Unit]` is fine. For `FileSystem.append`, it's probably better to use a signature more like `FileSystem.append(in: Process[Task, RenderedJson], failureCriteria: FailureCriteria): Process[Task, RenderedJsonError]`, where `RenderedJsonError` could store a chunk of JSON entries that failed (if feasible), and `FailureCriteria` would be an ADT indicating a certain number of failures, or a certain percentage.

Does that make sense or is there a better design?