reorg device detection and sync logic to account for many techniques

When this code was written there were only two techniques supported: GVFS
mount and direct MTP.  But we've found that there are many approaches that
KeySync should use, so the core app logic should better reflect that.

fixes #2131
refs #2125
make function to get ChatSecure keystore path to remove duplicate code
If the ChatSecure file must be manually copied, show instructions to user

fixes #2145
moved jenkins script into its own script in this git repo

This will mean that all the jenkins jobs will share the same changes
without having to update anything in the GUI.  Plus other people can run
the test suite as they want.

refs #1888
jenkins: run the tests in the virtualenv after its setup

This should test that the setup.py file listings are complete, and that all
of the files and dependencies are getting properly installed.

refs #1888
safety checks for jenkins.sh so it doesn't delete things in the wrong place
keysync-gui: add app icon on all platforms (Mac OS X gets it from .app)

This code should load up the standard keysync.png as the app's icon. On
Mac OS X this is already handled by the standard .app wrapper, and that
call does not doing anything on Mac OS X.
jenkins.sh: add additional pip+virtualenv run that uses no site packages

This should be a better test of whether all of the dependencies are
properly lists in setup.py.
move all relevant TODOs to the issue tracker, delete the rest
pylint thinks its bad form to have two letter variable names
run-tests.sh: add gnupg as a source to the multi-input test
gnupg: remove unused imports
fix all "Relative import" problems from pylint, standardize access to util

This standardizes the way to access the stuff in otrapps.util and makes
pylint happy, so we have nice clean Python code.

refs #1888
keysync-gui: move setup code into App.__init__() to limit global vars

This keeps the "main()" very tiny, with ROOT as the only global var.
keysync-gui: inside the App class, use self instead of root

root is an instance of App, so it the class should not be referencing an
instance of itself.
keysync-gui: rename global var 'root' to 'ROOT' following python conventions
fix pylint complaints about style

* Missing docstring
* Invalid name "fileMenu" (should match [a-z_][a-z0-9_]{2,30}$)
* Unused import
* Unnecessary semicolon
* Comma not followed by a space
* Redefining built-in 'dir'

refs #1888
standardize shebang on: /usr/bin/env python

Packaging will rewrite it as needed, like Debian will rewrite it to
/usr/bin/python.  This one is the most flexible, it works basically
anywhere, including virtualenv.
jenkins.sh: add pylint error checking

Eventually we should enable more pylint stuff, like warnings and more.
Right now there are just too many to deal with...

refs #1888
jenkins.sh: make pylint handle the hashlib hash classes properly

hashlib uses some magic to load whatever is built into the local openssl.
pylint gets confused by this, so we need a pylint plugin to trick pylint
into thinking everything is good.

refs #1888