Multi-instance support

Only works in the GUI for now, doesn't break  the command-line client but the new options are not implemented.

Related to #29 
Uh oh, I'm still confused here. The start of the subroutine sets `installCanceled` to `false`. I can't spot anything that can change it to true before this point...

Oh! there's `CancelInstall()` defined below, and that can be called from a thread in the GUI.

It's not clear from this code that we're using `installCanceled` as a way to communicate between threads, so this *really* needs some documentation.

- [ ] Document inter-thread communication variables.