Manipulating Linux /etc/group group members (Ref: Issue# 11102)

(1) modules/groupadd.py : Extending by adding three new functions.
adduser, deluser, members . For now it assumes an OS command ‘gpasswd’
is available
.

(2) states/group.py : states.group.present state function is refactored
(along the lines of states.users.present)  to support the following new
options.
  - addusers
  - delusers
  - members

This patch is for review now. This  is currently tested on CentOS(RHEL)
distributions.
Old group.present() state function is renamed as present_old() for now.
Refactor and modularize of the loader interface, adding Map to pyobjects

The problem with using the loaded states (see commit cc8539f) is that
you can end up in situations where a particular state doesn't exist for
whatever reason. This prevents you from building states freely (see
ticket #10918).

The refactor focuses on breaking out the `gen_functions` function into a
number of smaller reusable functions so that pyobjects can load all of
the states and still process `__virtual__()` and `__virtualname__` in a
way that makes sense for building states. After all pyobjects is just
compiling a high state data structure, if a state is available or not
during application time is up to the minion.

As part of this refactor I have also updated all of the inline comments
in the loader to be more consistent with the way things are actually
working now (such as `__virtual__()` returning a string being
deprecated).

There are also some pep8 fixes to the loader file.

Fix #10918

----

This also adds a new feature to pyobjects named `Map`, which allows for
definition of grain dependent data in a pythonic way -- using inner
classes.

----

Lastly this ditches the instance based registry and instead uses a class
based approach like a singleton.
Add salt-git-ssh script to pass the ssh identity to the git command.
Use salt-git-ssh script as the GIT_SSH command for git when using
private keys on ssh based repositories.
Removed unused import tempfile.
Moved git wrapper script to the package templates directory
Fixed templates package reference in git module
Don't use tokens if euid = 0
If a token is present, first attempt to use .root_key to auth.

Fallback to token if that fails.
fixed typo
chore(formatting): correct text wrapping
add functions for generating passwords

and salted hashes. #11256
Use raw string for secure_password
feat(highstate/output): "unchanged" is "successful"

This commit renames "Not Run" to "unchanged" and moves the label to be
shown next to "Succeeded".

There are three reasons why this commit is introduced:
 * I consider a state execution to have succeeded when it's not failed
   independent of `test=True` or `test=False`.
 * "Not Run" is semantically a tricky label. For some time I thought it
   meant "Not executed". Later I learned it was executed, just not
   changed anything. Since `state.highstate` refers to changes as...dun
   dun..."Changes" I think "unchanged" is a more precise label.
 * To save a single newline in console space ;)

This commit partially fixes issue #11198.
Need version v2.1.0 of pycrypto for get_random_bytes

Centos 6 and Rhel6 have v2.0.1
feat(highstate/output): show "changed" count

Previously only "unchanged" was show next to "Succeeded" (and this was
only done with `test=True`). This commit introduces "changed" count to
show how many states actually made changes.

This commit fixes issue #11198.
fix(state/file): set 'changes' when creating file

The 'changes' field was never set due to file existence check was done
after the actual creation of the file.
Fix pylint
fix(state/file): populate `change` on touch

Previously when a file was touched, the `changes` field was never
populated. This commit fixes this.
Document PyMongo requirement when using mongo ext_pillar