Add URL level data caching for API calls

Add caching for URLs, such that asking for a given URL will give you the cached version on the second hit, until the cache expires.  Allows cache to use various backends, including redis, memcache, or just in memory (default).