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 
Goodness me, this is a *very* long method now, and it's no longer doing what its name describes, as it may not actually install this list of modules (it may just download them, and it may cancel that without `return`ing any status to indicate that it's done so).

This isn't a blocker for this PR, but I'd love to see this broken up into parts; a `DownloadList()` is obvious, and some sort of Kraken for signalling that we didn't get everything we asked for. (A kraken is perfect here, because there's no risk of naive code ignoring the return value and just thinking it succeeded.)

- [ ] Add TODOs to `InstallList` to split it up into pieces.