Allow binding FanOutExecutor instead of WorkQueue

At Google, we are not using WorkQueue heavily because we don't
need the extra functionality it provides and it comes at additional
complexity. Instead, we use the FanOutExecutor.

This change allows using WorkQueue or FanOutExecutor based on
initialization.

Change-Id: I71ed23870d674bbaa0e1d2dde3204e93aea8af33
4 files changed