elasticsearch returner.

Dependencies:

- official elasticsearch python client
- jsonpickler.

configuration is defined in the master config file:

```yaml
ext_job_cahe: elasticsearch

elasticsearch:
    host: 'some.host.com:9200'
    index: 'salt'
    number_of_shards: 1 (optional)
    number_of_replicas: 3 (optional)
```
Reimplemented 'latest_version()' to fix #12663 and make it more readable + better debug-able.
Added preliminary documentation
correct master settings
add link to elasticsearch client library docs
fixed lint errors
Initial commit of a zookeeper concurrency control module
Update to tomcat.py

-Added "force" (default false) option commensurate with force option in salt.modules.tomcat.deploy_war to allow forced deployment of a .war even if the version strings match.  
-Forced successful deploy comment to be a string instead of dict to compensate for https://github.com/saltstack/salt/issues/12840
Update tomcat.py
Add generate_password to shadow module
Better, but it now has retries and sleeps
Add some comments
Add algorithm argument to get_hash
Use salt.utils.pycrypt to generate hashed password
compatible lower Crypto version

RHEL6/CentOS python-Crypto is v2.0.1
adjust salt to crypt_salt for gen_hash
Added note about using = in cmd.run commands

Refs #5884
Allow arbitrary libcloud args in salt cloud profile
Cleaning up whitespace
Merge branch 'yanatan16-patch-linode-libcloud-args' into develop