Files mock 2

@gaurave This should mostly finish off the mock file system. There are some file copy/move operations that are not implemented. I figure we can do those as necessary. They throw exceptions when called, so they won't silently fail.

It's not clear to me how some things would be mocked out. In particular, classes that the user creates directly, like `FileReader`s. Perhaps at some point we do more to using dependency injection? Or have a factory class for creating FileReaders, that switch over to using mocks when the mock file system is active?

In any case, I don't think this issue affects us right now.