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()
```
I think it would be cleaner if you kept the implicits close together