Initial filesystem framework

To start, the file system exposes its capabilities via an object
named FileSystem, which is the first thing created. Other objects
can be created, using the FileSystem as a base, to expose functionality.
Either 'client' objects can be created (File currently, Directory
and Symlink to come), which are used to query the file system,
or 'server' objects can be created (Module), which are used to
handle operations against specified file system paths.

The FileSystem here only operates on Module instances which are
running in the same thread as the 'client' objects; so don't
call blocking operations without expecting everything to block.
Support for remote modules will be added, as will support for
asynchronous calls, in future patch sets.

See src/samples/TimeOfDay as an example of the calling paradigm.

* Clients can access the file system via the FileSystem class
* Currently only File objects are supported
* TODO: add support for directory & symlink objects

* Modules can be registered with the file system
* Currently only local modules are supported
* TODO: add support for remote modules