Run runs each task in its own go routine and returns the result of the first task to complete (or error). A timeout
is specified to limit the whole process. Each task should observe the context and return once the context is done.
Task is a function which performs some kind of activity and returns an error value. It also observes the given
context and, once the context is done, terminates the action and returns (the returned error is ignored in this case).