- validator: fix confused logic.
    A "viable" result is one that could potentially become the canonical result,
    i.e. the outcome is SUCCESS and the validate state is not INVALID.
    The existing code treated all results with outcome SUCCESS as viable,
    which is wrong.
    In particular, this could cause workunit.target_nresults
    to be incremented inappropriately.
- client: there were many places in the code where we keep track
    (usually in a static variable called "last_time")
    of the last time we did something,
    and we only do it again when now - last_time exceeds some interval.
    Example: sending heartbeat messages to apps.
    Problem: if the system clock is decreased by X,
    we won't do any of these actions are time X,
    making it appear that the client is frozen.
    Solution: when we detect that the system clock has decreased,
    set a global var "clock_change" for 1 iteration of the polling loop,
    and disable these time checks if clock_change is set.
- client: a couple of more clock-change fixes
- Client: debug last commit.
  Also fix bug where benchmarks don't end when clock goes backward.
- client: updated Windows version identification, from Robert Kress
- client and wrapper (Linux): when parsing /proc/x/stat entries,
    handle command names that contains white space
MGR: Fix bugs in code which limits event log to 2000 messages
MGR: Fix bugs in code which limits event log to 2000 messages