Create virtual filesystem abstraction
In !315 (closed) we saw that the code that handles requests and opens files on disk only uses a very small interface to interact with the filesystem. To help the transition to object storage we will take this "virtual filesystem" code and add it to Pages, with tests, and a basic implementation based on the real filesystem.
This was previously discussed in #437 (comment 393149493)