Add initial version of FileStorage stream wrapper

Currently accepts a file hash which can be stored in the database as a pointer
to an on-disk file. The gain from the subdirectory system derived from the hash
is that we can store millions (billions?) of files efficiently against a typical
filesystem. The gain by using stream wrappers is that we can use a different
backend (I have S3 in mind) by implementing the appropriate wrapper.