ensure joining threads are always notified when a thread exits

Previously, we'd only do this if the thread exited without throwing an
exception.  Now we do it regardless.
fix GC safety issues in classpath-openjdk.cpp
force a GC in allocate3 if the heap limit has been exceeded

Otherwise, we'll throw an OOME even though there may be enough
unreachable objects eligible for collection to get back below the
limit.