Change threadPool to ExecutorService

It would be nice if TransferManager could be created with any implementation of ExecutorService. At the moment it requires ThreadPoolExecutor, which means that it cannot be used with other implementations of ExecutorService such as guava's ListeningExecutorService.