failover option & standby

This issue is to take over #93 .

Here is a list to finish before merge.
- [x] Failover option
- [x] Standby
  - [x] Controller acts as failure detector and reporter
  - [x] Make sure standby node is waken up on other nodes' failure
  - [x] correct standby WaitFailure behavior (in the second section below)
- [x] test failure in slave ParentDataReady()

More details for each part:
### Failover option
The idea is that to have a simple, uniform way to do random failure at any task function. For example:
```Go
func (t *dummyMaster) SetEpoch(epoch uint64) {
        ...
	if t.testablyFail("SetEpoch", strconv.FormatUint(epoch, 10)) {
		return // failure happened
	}

```
It hides the details of closing framework, releasing resources inside.
The second goal is to have configurable failure options:
```Go
	Config: map[string]string{
			"SetEpoch":  "fail",
			"failepoch": "1",
			"faillevel": "100",
		},
```
For example, the "faillevel" is a number between [0, 100] the probability to fail.

### Standby
The first thing to change is to make controller detector and reporter of any task failure. A change in health dir
```
//   /{app}/healthy/{taskID} -> tasks' healthy condition
```
The second thing is to change current regression framework failure test to use standby instead of sleeping for ttl long to pass tests.

TODO: Currently WaitFailure() in standby watched the any node getting reported in /failedTask dir. The correct procedure is that we would 
- [x] iterate all failed tasks, try occupy any,
- [x] delete failed if succeeded on any node,
- [x] otherwise watch any new node getting reported. 

### Slave ParentDataReady random failure
Change regression_framework_test to take unlimited failure.
```Go
    go func(np <-chan bool) {
		for flag := range np {
			go drive(t, job, etcds, numOfTasks, taskBuilder)
		}
	}(nodeProducer)
```
This will enable probabilistic failure testing.
The slaves would fail in a probable manner at ParentDataReady() method. Despite any number of failures, regression framework test will end with the same result as it never had any failure.
We shouldn't have a timeout here.
The timeout is a safety check that if a standby couldn't grab a task, we can know where the error comes from. This is useful to detecting errors in dev.