Replace global ExecutionContext by a cached thread pool context

The default global execution context should not be used, if blocking IO operations have to be performed .
This PR introduces an ExecutionContext backed by a CachedThreadPool and replaces all occurrences of the global execution context.