m/n/k/reconciler: implement leader election

Before this change, the reconciler runs on all Kubernetes controllers. 
When we are in a rolling upgrade of the cluster where a reconciled 
object changes, this will cause the old and new versions of the 
reconciler to fight each other, constantly updating the object back and 
forth.

Now, the reconciler is elected among nodes of the latest release. The 
status of the reconciliation is communicated to all Kubernetes 
controllers through a new key-value in etcd.

Additionally, compatibility constraints can be expressed by changing the 
constants minReconcilerRelease and minApiserverRelease, allowing 
reconciliation to happen in a controlled way that ensures compatibility 
even during rolling upgrades.

Change-Id: Iaf7c27702bd9809a13d47bcf041b71438353bef2
Reviewed-on: https://review.monogon.dev/c/monogon/+/3062
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/kubernetes/BUILD.bazel b/metropolis/node/kubernetes/BUILD.bazel
index d775c50..854f6c3 100644
--- a/metropolis/node/kubernetes/BUILD.bazel
+++ b/metropolis/node/kubernetes/BUILD.bazel
@@ -19,6 +19,7 @@
         "//go/net/tinylb",
         "//metropolis/node",
         "//metropolis/node/core/clusternet",
+        "//metropolis/node/core/consensus",
         "//metropolis/node/core/curator/proto/api",
         "//metropolis/node/core/curator/watcher",
         "//metropolis/node/core/identity",