Refactor Upload Backend

I moved the management of the *writer thread* from the `IoDispatcher` to the `AbstractUploader`. This way, each concrete uploader can (or better must) implement its own 'event loop'. To do that, it simply implements the pure abstract method `WorkerThread()`. The canonical implementation would be an endless loop, that continuously pops from a job queue using either `AcquireNewJob()` or `TryToAcquireNewJob()` (see *local_uploader.cc* for an example). 

Inside this event loop anything can be done, since it runs in its own dedicated thread (managed by `AbstractUploader`).

Unittests included...