1579 cleanup

Having a predicate method (which, by definition looks like a query) perform a side effect makes for a confusing API.  The fact that `first_reset?`, when called twice in a row, can return different values, is _very_ surprising, IMO.  Here's an alternate suggestion:

* Have a `@needed_resets` instance variable that is incremented in `Runner.run` (since every time the runner is used, a corresponding reset should generally be used).  Have `reset` decrement that variable.  In `Runner.run`, you can also check (before incrementing `@needed_resets`) to see if `@needed_resets` is positive, and if so, issue a warning -- that would mean that the runner is being reused in the same process but there have not been as many resets as prior runs.  Then `internal_reset` doesn't need to mess with issuing a warning (or not) -- it just does the reset.