Remove Payload from the Conn struct

Putting it in Conn meant that the client couldn't mutably borrow the
payload and the Conn at the same time.

Instead, pass it as a separate parameter to the callbacks.