Use install instead of installmissing if Chocolatey >= 0.9.8.24

X-ref: #13980

This also adds a chocolatey.chocolatey_version function and does some
DRY cleanup so that the error message and exception are raised in
_find_chocolatey() instead of in 6-8 different places.
Adding a check if the respective pkg.upgrade cmd fails.
Fixing lint issue in pkgpng.  Reverting changes in brew.py because of unit tests failures.
use unicode strings

Partially Fixes #14695
Add cygwin package installation

Currently only hadles adding packages. Does not remove packages. It is
setup to update packages any time it is run, but there is no independent
update functionality.
Curently no unit/integration testing is done. I haven't wrapped my head
around the way the mocking and stuff is done yet.
Added update and uninstall functions

Should be able to remove and update things now. Also doesn't always
update when installing anymore. Update now only called via
salt['cyg.update']()
add unicode prefix to some strings
Added update and uninstall functions

Should be able to remove and update things now. Also doesn't always
update when installing anymore. Update now only called via
salt['cyg.update']()
Merge branch 'addCygwin' of github.com:s7726/salt into addCygwin
Installation is now working

usage:

cyg.installed:
    - names:
      - dos2unix
      - ssh
      - vim
      - tmux

Some of you may notice that 'ssh' is not a cygwin package, 'openssh' is. Currently it is reported as successfully installed. My next step is to check the list of named packages against the available packages and return false if they don't exist.

Have not tested package removal.
Now checks if the package name is valid

Currently fetches the entire package listing for each check. Next step
is to cache the packages for each session. I read about one of the
__var__'s that salt has that does caching like that.
Cache the package listing per run
Package removal is working
Added ability to update all installed packages

Cygwin does not appear to have a way to just upate individual packages.
Also probably not a good idea since it can all be pretty tightly
coupled.
Pep8'ified
Some more style fixes, swap before and after diff

Only functional change is to fix the order of the diff. It is correct
now.
corrected file.append state to not report modifications when file is in correct state
Fix service.py version parsing for SLE 11

"osrelease" on SLES 11 is in the form "11 SP3", i.e. major version, then a space, then service pack number. This means we can't just split on '.' to get the major number for comparisons. Rather we need to split on non-digit characters to handle both space-delimited and dot-delimited release formats (yuck).
Adding the ability for apt based pkg installs to not install packages that have been marked as recommended.  By default these packages are installed but passing install_recommends as False will cause these not to be installed.
Cleanup cp.push and file_recv_max_size options