Cache gitfs environments

This commit improves performance by not repeatedly looking up the
list of available environments whenever they are needed, and instead
writing them to a cache file whenever the fileserver is updated (and
changes are found). envs() will prefer the cache if it is available.
Merge pull request #9792 from terminalmage/0.17

Cache gitfs environments (0.17 branch)