Use interfaces in functions signatures.

Given the interface

    type Client interface { ReadMessage() (Message, error) }

The struct `client` implementing the `ReadMessage` method as follows

    func (c *client) ReadMessage() (Message, error) {

would implement the interface while the struct `client` implementing the `ReadMessage` method as follows

    func (c *client) ReadMessage() (*message, error) {

would not implement the interface. As it is at the moment, the `client` struct does not implement the `Client` interface because of this difference. This PR replaces specific implementations in fuction signatures with corresponding interfaces.