rave: Add extended listing capabilities to file system, file system tweaks and speedups.

rave.filesystem.list() now can optionally take a subdirectory to take as root when listing files.
Additionally, on-demand providers can now implement listdir() to return lists of specific requested directories.
This is optional.

The isdir/isfile/exists/listdir options will now first check the cache before inquiring the providers.
The file system will also now properly ensure all parent directories of a directory have been made.

Finally, add some more tests for the new functionality.