setup.py: add minimum required qrcode version

refs #2124
gnupg: gracefully handle error conditions when no data exists
tell windows users that we can't automatically sync for them yet

refs #2127
mtp_is_mounted() will never return True on win32 for now

refs #2127
Use the word 'save' instead of 'write' in user facing messages

Most people know what save means, while 'write' is more devspeak.
win32: after writing the CS keystore, pop open explorer.exe

fixes #2127
win32: fix the icons' datadir detection in windows
win32: ignore gvfs path setting on windows

apparently geting non existing env vars causes crashes
win32: update the pyinstaller spec files

one is for onefile mode and the other for older mode
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