move guardfile reevaluation to runner (refactor)
mark interrupted task as failed (fixes #582)

Previously, an Interrupt resulted in a plugin being fired.
Respond to signals using threads (fixes #571)

  * Thread necessary because Lumberjack uses lock

  * Also, Listen has bug where pause calls Record.build
  (instead of Record.async.build)

  * join should not be used due to potential deadlocking

  * run within preserved state to avoid overwriting Pry
Prevent Pry restarting when unwatched files change

  * closes #536 even thought it only mitigates the problem (the
  "correct" fix is synchronous guard: #595, where Pry.start
  doesn't have to be reentrant any more)

  * also saves the user from adding various ignore rules to
  make polling work better, etc.

  * this also prepares Guard for better integration with
  upcoming Listen 3.x API