Background
As the ticket's title says - currently the Agent's constructor is private and it should stay like that. But there is a companion object associated with it - it can have a function called apply that would instantiate the agent. We can use this for user to have a possibility to inject logging and dispatcher as he wants. (Not completely sure about the dispatcher though - TO discuss).
If it's not specified, a reasonable defaults should be used.