func (wf *Workflow) RunFrom(name string) error {
	for i, t := range wf.tasks {
		if name == t.name {
			return wf.run(wf.tasks[i:])
		}
	}
	return fmt.Errorf("workflow: task %v not found in: %v", name, wf.Summary())
}
RunFrom runs workflow from task specified.
package cloudflow
import (
	"fmt"
	"reflect"
	"strings"
	"log"
	"os"
)
type Workflow struct {
	tasks  []*namedTask
	logger *log.Logger
}
func NewWorkflow() *Workflow {
	return &Workflow{
		tasks:  make([]*namedTask, 0),
		logger: log.New(os.Stdout, "[cloudflow] ", log.Ldate|log.Ltime|log.Lshortfile),
	}
}
func (wf *Workflow) SetLogger(logger *log.Logger) {
	wf.logger = logger
}
func (wf *Workflow) AddTask(name string, task Task) {
	wf.tasks = append(wf.tasks, &namedTask{name: name, task: task})
}
func (wf *Workflow) Execute() error {
	return wf.Run()
}
func (wf *Workflow) Run() error {
	return wf.run(wf.tasks)
}