Create a new fetcher for each solve
Use a separate "tools" object to hold other objects

So we can stop abusing fetcher for this purpose.
Simplified Apps.get_selections_* methods
Made download UI per-solver

This allows the GUI to show dialogs for several solves independently.
They share the download thread pool, but cancelling only affects that
solve.