Reworking client tests, added more utils for fs testing, failing multipl...

This PR is about adding a bunch of tests for various ways that a client might interact with the server, and making sure the filesystem ends up in a state we expect.

This isn't ready to land yet.
A non-empty dir will have a file/dir inside it, so it will get created when that file/dir is created (mkdirp).  An empty dir needs to be explicitly called out with `null`.