Suggested refactoring of run.go

@myleshorton Our little discussion about the run.go file inspired me to propose this.  It's 25% less code and I think it's a lot easier to follow.  That said, I haven't tested it yet.  If you think it's worth it, I'm happy to test it and then we can process the PR.
@myleshorton This is a logic change from what you had originally.  During testing, I noticed that random fallbacks were failing to test successfully within 10 seconds and thus being removed from rotation, only to be re-added on the very next pass.  It seems to me that allowing multiple attempts to verify fallbacks is pointless if the 10 second timeout applies across all attempts, so I made it apply to each individual attempt.