Completely separate the core, the client protocol and the application.

* Use a mix of command pattern, injection pattern and visitor pattern
  to make the core independent of the client protocol while supporting
  asynchronous operations. This will be useful to implement the http
  client protocol with notification through websocket or even http polling.
* The application can customize the protocol by implementing the optional
   erodws_protocol behaviour.
* The application must customize the core by implementing the behaviours
  erod_user and erod_session in addition of erod_factory and erod_document.