ThreadGroup.uncaughtException() should not be called from library code.

It seems to me that it is incorrect to be calling uncaughtException(...) from library code. Implementors of this method (or of UncaughtExceptionHandler) will only be expecting to be called by the JVM when an exception has propagated up the entire thread stack and the thread is terminating.

> Called by the Java Virtual Machine when a thread in this thread group stops because of an uncaught exception, and the thread does not have a specific Thread.UncaughtExceptionHandler installed.

In this changeset I've replaced these calls with logging of the exceptions to System.err (which is what the default uncaughtException implementation will do).  If this is not what people think is the best replacement here then we could substitute this for say JDK logging, or we could swallow the exception completely. I'm also open to refining the text of what is logged. This push request was just intended as the minimal change that replicates the behavior I think the author wanted to get a yay or nay on the change in principle.