SPARK-1582 Invoke Thread.interrupt() when cancelling jobs

Sometimes executor threads are blocked waiting for IO or monitors,
and the current implementation of job killing may never recover
these threads. By simply invoking Thread.interrupt() during
cancellation, we can often safely unblock the threads and use them
for subsequent work.

Note that this feature must remain optional for now because of a
bug in HDFS where Thread.interrupt() may cause nodes to be marked
as permanently dead (as the InterruptedException is reinterpreted
as an IOException during communication with some node).