why ```T``` and not ```ExecutorService```? IMO this can cause ```ClassCastExceptions``` if we invoke this method with a specific ```ExecutorService``` implementation and the factory returns another.