Revamp storage classes, add node subdirs and caching

This is a mammoth commit, sorry about that. In trying to add node subdir
support, I ended up refactoring a lot of the logic from yaml_fs into the
storage base class, and then caching was added along the way, I almost
didn't notice. ;)

Signed-off-by: martin f. krafft <madduck@madduck.net>