First pass at an automated check in the minion tune-in loop, using a threaded approach to periodically refresh the master if the grains on a minion have changed.
Re-write to use Scheduler instead of threads.
Update state.py

https://github.com/saltstack/salt/issues/7991
Corrected typo (extended auth → external auth).
Add a lexical parser for MySQL grants to the MySQL module. Change the behavior of the grant-checker to use this new method by default and fallback to the strict method if it fails.
Generate jid in _wait in state module if not specified (can happen when called in the mine with queue=True)
Update state.py

https://github.com/saltstack/salt/pull/7992#issuecomment-26747276
if->elif per @s0undt3ch
Merge pull request #8001 from eliasp/eauth-typo

Corrected typo (extended auth → external auth).
Corrected typo (fromt he → from the).
Merge pull request #8007 from eliasp/auth-init-typo

Corrected typo (fromt he → from the).
slice the string. Don't use lstrip incorrectly
Merge pull request #8008 from UtahDave/develop

slice the string. Don't use lstrip incorrectly
Realized that the lexical grant parser doesn't handle multi-word statements. Corrected for this condition.
Minor code reformat.
Added check about empty string
Merge pull request #8011 from malinoff/fix-no-output

Fix printing newline if there is nothing to print
Merge pull request #7992 from puluto/develop

Update state.py
Adding close process and service stop to windows installer
Pass cmd as list, not string, to subprocess.Popen. Otherwise, packages installed from files will fail with: OSError: [Errno 2] No such file or directory