core: DownloadManager: fix signalling

- When aborting downloads we need to disconnect the error signal early
or we might run into a deadlock when quitting application. Instead we
emit a OperationCanceledError after aborting has finished.

- A downloadJob must be removed internally *before* signalling
downloadFinished or we might run into a race condition/segfault when
quitting the application.
core: DownloadDialog: allow to de/activate the buttons
core: handle quit centrally and inform user of running downloads

For all events that lead to application quit we trigger now quit() in
core.js which informs the user if downloads are in progress.

Note, that connecting to QQmlApplicationEngine::quit() does not work
because a popup dialog does not block the quit process on android.
Therefore we need to trigger Qt.quit() manually *after* the download
dialog has finished.