break out FileSource as an abstract class

add CachingHTTPFileSource implementation
Merge pull request #677 from mapbox/caching-http-file-source

Break out FileSource interface