Use pools in ActorContext instead of Thread per actor.

@jdantonio Is there a branch/notes I can look at?
I gave it a quick look, to identify what is missing:
- [ ] use pooled executor in SimpleActorRef
- [ ] make sure only one message is processed at a time. Add proxy class before any executor which will ensure that only one block is being executed at a time for a given key (e.g. actor/agent object) (use this also for agents)
- [ ] remove `@executor.shutdown` from `#shutdown`
- anything else?