Get result status from service

Add Service.resultStatus to get the save status (saved, can save, cannot
save) of a result. Use to enable/disable appropriate I/O controls.
Improve method of joining paths

Create pathCat helper function as a Qt version of os.path.join. This
takes any number of arguments and calls QDir.cleanPath on the result (to
remove extra '/'s and '.' elements), and replaces the previous method
which had bunches of "%1/%2" literals floating around the code. (The new
method does something similar internally and is almost certainly
slightly less efficient, but the code is much cleaner.)
Implement saving of results

Add Service.saveToDisk to write result images to specified archive
location. Modify Service.deleteResult to delete only the cache files
(used after writing the result image to the archive). Modify
MainWindow.{show,update}Result to also understand saved results. Add
MainWindow.saveResult to tell the service to save the result to the
currently selected archive location.
Fix error message

Remove unset 'error_title' from reporting failure to create a new
folder.
Fix bugs in information pane

Don't try to set text interaction flags on other than QLabel. Force
horizontal expanding size policy on value widgets (fixes a bug where the
value widget would compute its vertical size for wrapped text as if it
was expanding, but then use a smaller horizontal size, causing truncated
text). Use correct inheritance test when deciding if text should be
wrapped.
Improve existing file handling

Add check in Service.saveToDisk if the destination already exists. Use
QCryptographicHash to test if it is the same file, and show an explicit
error to that effect if it is not. If it is the same file, accept the
existing destination as a successful save and remove the source.
Enable links in information pane

Change how we set label text interaction flags of value labels in the
information pane to not remove existing flags (by default, allowing
mouse interaction with links). This way services that want to use links
don't have to manually re-add the flag.