env: status page

Updates page asynchronously every 5 seconds.
Introduces beforeStart and afterStart trigger points to update setup status information.

Change-Id: Ic2f6a9bb7a0fefeefc4d6a1a7338d506a4f99e80
diff --git a/core/installer/tasks/dns.go b/core/installer/tasks/dns.go
index 25af486..e115b2c 100644
--- a/core/installer/tasks/dns.go
+++ b/core/installer/tasks/dns.go
@@ -15,12 +15,19 @@
 type Check func(ch Check) error
 
 func SetupZoneTask(env Env, ingressIP net.IP, st *state) Task {
-	return newSequentialParentTask(
+	ret := newSequentialParentTask(
 		"Configure DNS",
 		true,
 		CreateZoneRecords(env.Domain, st.publicIPs, ingressIP, env, st),
 		WaitToPropagate(env.Domain, st.publicIPs),
 	)
+	ret.beforeStart = func() {
+		st.infoListener(fmt.Sprintf("Generating DNS zone records for %s", env.Domain))
+	}
+	ret.afterDone = func() {
+		st.infoListener("DNS zone records have been propagated.")
+	}
+	return ret
 }
 
 func CreateZoneRecords(