Refactor ExecutionContext so we use the Context interface instead, and thus make it possible to use arbitrary context implementations