ActionResult refactor to store structured results

Should `Action.Finish` take a third parameter to capture the possible error string?