SI-8938 Catch all throwables in PromiseCompletingRunnable

It's common for error handling code to avoid catching "fatal"
throwables, because it's usually not useful to try to recover from them.
In the case of ThreadDeath and ControlThrowables, catching them
indiscriminately can also interfere with the correct flow of execution
for a thread. However, if a throwable completely unwinds the stack on a
Future's thread, the future will never complete, and the cause of the
failure is inaccessible to the caller.  Accordingly, it makes sense to
catch every throwable here, no matter how fatal it is, so that it can be
propagated to the calling thread.

This change brings the real behaviour of Future objects in line with the
existing documentation, specifically the discussion of
InterruptedExceptions, Errors, and ControlThrowables in the onFailure
method's description. Additionally, this change adds and fixes tests in
PromiseTests.scala to verify the correct behaviour. It turns out that
tests for this behaviour already existed, but they bypassed
scala.concurrent.impl.Future and tested Promise directly, leaving the
offending code untested.
Adjust default timeout in PromiseTests

The current value is Inf. However, this results in deadlock if any of
the tests wait on an operation that never completes. This shouldn't
occur in practise, but as an example, a previous version of
scala.concurrent.impl.Future would trigger this for some of the current
tests. This change replaces Inf with a short value, and adds a comment
to explain why this should be safe to do.