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/tasks.go b/core/installer/tasks/tasks.go
index 6d0ec01..c097af3 100644
--- a/core/installer/tasks/tasks.go
+++ b/core/installer/tasks/tasks.go
@@ -21,10 +21,12 @@
 }
 
 type basicTask struct {
-	title     string
-	status    Status
-	err       error
-	listeners []TaskDoneListener
+	title       string
+	status      Status
+	err         error
+	listeners   []TaskDoneListener
+	beforeStart func()
+	afterDone   func()
 }
 
 func newBasicTask(title string) basicTask {
@@ -81,7 +83,15 @@
 }
 
 func (b *leafTask) Start() {
-	b.callDoneListeners(b.start())
+	b.status = StatusRunning
+	if b.beforeStart != nil {
+		b.beforeStart()
+	}
+	err := b.start()
+	defer b.callDoneListeners(err)
+	if b.afterDone != nil {
+		b.afterDone()
+	}
 }
 
 type parentTask struct {