Nonblocking

This PR will run the algorithm on a background thread (resolves #3). 

- This PR changes a lot of the code, since making the execution of the algorithm non-blocking required
to move many tasks and functions around.

- The Worker was introduced to run the algorithm on the background. Workers will make it very easy to
extend for future algorithms.

- This PR gives a better separation of plugin, algorithm dialog and algorithm execution to allow for a less
painful addition of new algorithms.