DRY cache usage code

getAgentInfoCached() and GetProjectInfo() contain mostly duplicated code. cache.Cache can be refactored (or a wrapper can be built) to expose a better API.