Minor improvements to resilience of Heartbeat Thread

Improvements include:

- The HeartbeatThread is now always daemonic, so it will not prevent the
Master or Worker from exiting.
- Any exceptions that propagate from the HeartbeatExecutor will be printed.
- mIsShutdown was made volatile, and Thread.interrupt() used, to ensure
  timely shutdown of the thread. Note that either one is sufficient, but
  without either of them, the JVM does not guarantee this thread ever exits.