Cache: split in base class and actual implementors

Create a base Cache class that does the work of serializing function
output, calling writers, calling readers, and unserializing the output.
Use this class as the base layer for extended classes: a Null class that
does nothing much (for when caching is disabled), and a Filesystem class
that caches to a certain directory.
Cache and URI: add tests
Travis CI: add jobfile for automated testing