Writable filesystem

**Note**: This branch is not complete, do not merge until all requirements are met.

We'll also be changing existing read-only functions to use a buffer in memory so that read functions can use the same code for each kind of stream.

#### Rewrite read-only functions to use in-memory buffer

* [x] openFileRead
* [x] streamReadByte
* [x] streamReadWord
* [x] streamReadBuffer
* [x] getStreamInfo
* [x] streamReadToEnd
* [ ] advanceBlock

#### Add writable functions

* [ ] openStreamWrite
* [ ] streamWriteByte
* [ ] streamWriteWord
* [ ] streamWriteBuffer
* [ ] flushStream
* [ ] seekStream
* [ ] Update closeStream
* [x] deleteFile
* [x] createFileEntry
* [x] createDirectoryEntry
* [ ] renameFile
* [ ] deleteDirectory
* [ ] renameDirectory
* [ ] moveFile
* [ ] moveDirectory
* [ ] garbageCollect
* [ ] Update other functions to use garbageCollect when needed