Grains caching layer

* Creates a new flag for salt-call called '--skip-grains' that will completely bypass the grains loader. (Mostly for testing. Will break many modules in practice!)

* Creates a new flag for salt-call called '--refresh-grains-cache'. This forces a refresh of the grains cache on a minion.

* Adds a new minion config option called 'grains_cache'. Defaults to False.

* Adds a new minion config options called 'grains_cache_expiration'. Specifies the number of seconds allowable for before a minion grain cache is declared to be stale.

* Correct a potential syntax error in the minion config variable, 'grains_refresh_every'.

* Modify the 'apt' module so that it does not stack-trace in virtual() if grains aren't loaded.

* A new caching layer for the grains loader that can write to and read from a msgpack'd serialized data file containing grains that is stored in the minion cache.
Merge pull request #9915 from cachedout/grains_caching

Grains caching layer