more robust deadlock detection
Lock around building the deadlock chain using WITH-CAS-LOCK after the
tentative deadlock has been detected, and break the deadlock chain before
signaling the error.
This means that a single deadlock is reported only in a single thread.
Fixes occasional failures of deadlock-detection.1 due to a bogus vicious
metacircle. (Two threads detecting the same deadlock, then racing to report
the error detected as another deadlock, the reporting of which in turn looked
like a metacircle to CLOS if PRINT-OBJECT didn't yet have the right method in
cache.)