Externalize ExecutionContext

Externalize ExecutionContext so that users can decide which one to use.

So instead hardcoded ExecutionContext.Implicits.global in
```
val connection = Connection()
```
Akka users can do
```
implicit val actorSystem = ActorSystem("system")
implicit val executionConext = actorSystem.dispatcher
val connection = Connection()
```
Perhaps `ex` isn't the best name, as that's what people usually name caught exceptions