MultiAsyncToSync class takes a FutureTask<> as input, but only calls its .run() method. That is, we can simplify the interface and make it accept Runnable. This change is packward-compatible, as FutureTask implements Runnable. We should also allow MultiAsyncToSync to run tasks indirectly using the executor service, and update the unit tests accordingly.