cells: try harder to insure that dCache dies after an Error

After receiving an Error, dCache tries to self-destruct.  If an
further Error is received then there are no guarantees that this
orderly shutdown will succeed.  In fact, I've observed dCache
failing to shutdown from such an occurance when OutOfMemoryError
was thrown due to the native platform not allowing the creation
of any further threads.

This patch adds a fall-back plan.  If another Error is received then
the thread that received this Error waits to see if the shutdown
is going to succeed.  If it thinks it is then the thread dies; if
time elapses before receiving any confirmation of the orderly
shutdown is going to succeed then it immediately self-destructs,
this being the lesser of two evils.

Target: master
Requires-notes: no
Requires-book: no