m/n/core/{curator,cluster}: refactor against new Consensus API

This updates the Curator and the Cluster Manager to use the new
Consensus API, notably to use JoinParameters and ServiceHandle.Watch.

Using JoinParameters end-to-end requires piping them through a node's
roles. For this we create a new ConsensusMember role and replicate all
the data from JoinParameters there.

We also move a whole bunch of logic that used to live in the Cluster
Manager's Status object away from it. Instead, now the Consensus
ServiceHandle is exposed directly to downstream users, providing the
same functionality.

Change-Id: I8cfa247011554553836019f60ea172dd6069f49c
Reviewed-on: https://review.monogon.dev/c/monogon/+/522
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index 57e6a7a..557ed68 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -38,7 +38,7 @@
 	// As both the curator listener and roleserver might restart, this dial function
 	// is needed to possibly re-establish connectivity after a full restart of
 	// either.
-	CuratorDial func(ctx context.Context) (*grpc.ClientConn, error)
+	CuratorDial func() (*grpc.ClientConn, error)
 
 	// StorageRoot is a handle to access all of the Node's storage. This is needed
 	// as the roleserver spawns complex workloads like Kubernetes which need access
@@ -117,7 +117,7 @@
 // start/stop subordinate services as the Node's roles change.
 func (s *Service) Run(ctx context.Context) error {
 	supervisor.Logger(ctx).Info("Dialing curator...")
-	conn, err := s.CuratorDial(ctx)
+	conn, err := s.CuratorDial()
 	if err != nil {
 		return fmt.Errorf("could not dial cluster curator: %w", err)
 	}