improve shadow password handling on SmartOS

Fixes #9874
Also fixes an unreported error that when half of this fix is applied
password setting succeeds but appears to fail due to lack of reading
password hashes from the shadow file.
SmartOS Esky Packaging: Fix PATH for services

We ran into some weird issues with these SMF manifests
with certain critical binaries not being found in the PATH.

This PATH is derived from root's default PATH when logging
in to a SmartOS zone.
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
Merge pull request #9909 from nshalman/smartos-shadow-develop

improve shadow password handling on SmartOS
Merge pull request #9913 from nshalman/smartos-esky-sbin-fix

SmartOS Esky Packaging: Fix PATH for services
Added ``python`` Jinja filter to jinja renderer docs
Prevent the file.serialize python formatter from outputting OrderedDict