- Testing for self.shouldAbort in previous commit should have been preceded by
  self.shouldAbort = launcherMainFrame.progressDialog.shouldAbort()
  because the login thread's self.shouldAbort is only guaranteed to be up-to-date
  immediately after calling self.updateProgressDialog.  Admittedly, this is messy,
  but I'm just trying to make minimal changes at this stage, rather than redesigning
  the shouldAbort mechanism.

- User can now press Cancel during creation of the private key file and have the login
  thread abort before it runs the testTunnelThread.

- User can now abort half-way through createTunnel thread, i.e. after running chmod &
  chown on the local private key file and after requesting an ephemeral port, but before
  attempting the SSH tunnel.

- The checking for launcherMainFrame.progressDialog.shouldAbort() in the main SSH tunnel's
  while loop is now also done in the test tunnel's while loop, i.e.
    while not self.sshTunnelReady and not self.sshTunnelExceptionOccurred and count < 15: