relay: make events and calls pass through conversations

* rather than using super-classes which contain all the logic, split the classes up
* make sender interfaces and make conversations implement these interfaces