propagate errors correctly
adding an in-memory FS implementation

passes all tests, though the test runner currently can't handle >1 FS
at a time