Add a utility for doing master election via etcd.

Sending this for comment, will work on unit tests once people are happy with the code.
Actually, I had it returning a bool, but then the code looks like:
```go
func (...) becomeMaster(...) (bool, error) {
// bunch of if/else here
}

func (...) handleMaster(...) (string, error) {
 master, err := becomeMaster(...)
 if err != nil {
   ...
 } else if master {
  ...
 } else {
  ...
}
```

And I found that having the big if/else block in the handleMaster function kind of broke it up and made it harder to read, so while it is a little wonky to have becomeMaster return a string instead of a boolean, I actually think it makes the code more readable, since you can simply say:
```go
return e.becomeMaster(...)
```

I can change it if you prefer.