func NewClusterUser(address string, c Cluster, logger log.Logger) *ClusterUser {
	return &ClusterUser{
		address: address,
		cluster: c,
		logger:  logger,
	}
}
NewClusterUser returns a usable ClusterUser, which is an implementation of
the user node interface that wraps the passed cluster. It should be uniquely
identified by address.
package extension
import (
	"bytes"
	"context"
	"math/rand"
	"github.com/go-kit/kit/log"
	"github.com/pkg/errors"
	"github.com/peterbourgon/caspaxos/protocol"
)
type UserNode interface {
	protocol.Addresser
	Read(ctx context.Context, key string) (version uint64, value []byte, err error)
	CAS(ctx context.Context, key string, currentVersion uint64, nextValue []byte) (version uint64, value []byte, err error)
	Watch(ctx context.Context, key string, values chan<- []byte) error  
}
type ClusterUser struct {
	address string
	cluster Cluster
	logger  log.Logger
}
var _ UserNode = (*ClusterUser)(nil)