salt.utils: add is_linux() and is_windows()

These were mainly added after I saw the 2/3 different ways various
places in the salt code check to see if a platform is indeed windows
or not and I wanted to consolidate them all including the grains before
there necessarily is __grains__['os'] to rely on.
Switch the core grains to salt.utils.is_windows()
Move windows detection to using salt.utils.is_windows()

Also makes the reg and win_network modules not attempt to load when
there are missing python modules.
Clean up some logic in the utils python module

Also re-arrange the imports by size due to my OCD
Skip the virtualenv state test if virtualenv isn't installed
Provider doc enhancements

1) Added an example for the minion config option "providers".

2) Cleaned up line widths on solaris install instructions, and added
   information on how to use pkgutil as the default package provider.

3) Since systemd is the default provider for Arch Linux now, I corrected
   the information in the "State Providers" page so that the example of
   overriding the service provider reflects the current state of the
   codebase.
Don't nuke the tests because event self.destroy() always blows up
Skip the git state tests if a dns lookup to github.com fails

This is the quickest clever thing I could think of while running the
unit tests offline in the car during a long road trip.
Merge pull request #3002 from archtaku/develop

Minor correction to comments
Merge pull request #3003 from archtaku/docs

Provider doc enhancements
Updated config comments to reflect 8d723cd (pidfile / root_dir)
Merge pull request #3006 from tf198/develop

Updated comments for root_dir
Merge pull request #3004 from SEJeff/fix-unit-tests

Fix unit tests
Fix a bug in the loader

Several modules where __virtual__() were returning None were being
improperly loaded. Any __virtual__() that returns a string will
never evaluate to False when cast to a bool() so "if not virtual"
will do the right thing as we get more and more modules that might
not necessarily be written up to standard (until we can fix them)
modules.brew: make __virtual__() properly return False
Document the right ebuild package name format

It was discovered that pkg module for Gentoo-based systems does not work
as expected if the full package name (including the category) is not
specified. This is not documented anywhere, so this should give users
better changes to know about it.
Check issue #3008 on GitHub to know about further development.
Fix pkg state regression

acd949c and 0b5ce09 broke the pkg state, such that for single pkg
installs (i.e. no "pkgs" or "sources"), if the version arg is not
provided, a package will always be interpreted by the pkg state as being
installed, and the package will never be installed. This commit fixes
that regression.
Fix problem with attribute checks when data looks like:
"[(u'bus', u'ide'), (u'dev', u'hdb')]"
Bugfix problems with spaces in filenames
Also disable shell=True for security purposes
Force Gentoo-based distros to use full pkg name

Do not proceed unless package names are provided using the
category/pkgname format. For packages submitted without the category
name, offer suggestions from the portage tree.