2.x replication refactoring

We need to figure out the exact replication protocol for cases such as these. For example, if the sender reconnects and sends a Hello but the receiver is in state Opened already (due to a bug say), then we have a leaked receiver channel that is stuck with opened resources. We should close and remove the receiver channel after returning errors on the channel to the sender, as we are guaranteed that the sender will retry (and hence a new receiver channel will be created).