Implement notion of different image sources

This is so that we can do a http push to get the code running.

# Ready for merging

Example usage:

```
curl -H 'Content-Type: application/zip' -v --data-binary @- localhost:9123/update < ~/sw/auger/dist/v0-509-g58b9911.zip
```
how did this `for range` syntax ever work? It's doesn't compile for me:

```
$ go version
go version go1.3 linux/amd64
$ go build
# _/home/drj/sw/hanoverd
./main.go:78: syntax error: unexpected range, expecting {
./main.go:84: non-declaration statement outside function body
./main.go:85: non-declaration statement outside function body
./main.go:87: non-declaration statement outside function body
./main.go:88: syntax error: unexpected }
```

and isn't documented in http://golang.org/ref/spec#RangeClause