fix race bug: disallow simultaneous Exec()s
fix race bug: disallow simultaneous Exec()s

Previously only *check* of last run was safeguarded; now correctly safeguarding
against the act of executing as well. this is important because two concurrent
threads could have previously:
  1. *sequentially* checked they're ok to run (ie: has been > 2 seconds)
  2. then *concurrently* executed the command

Step 2 wouldn't be disastrous, but would defeat the purpose of trying to
throttle events to avoid unnecessarily repeated executions.

jzacsh/runonchange