Fix CATCH/quit interaction with TRY (cc#851)

User-level visibile effect: CATCH/quit no longer erroneously disables an
outer TRY (or ATTEMPT, etc.).

Try_Block_Halt attempts to catch both error conditions and halt
conditions (QUIT, HALT). However, Try_Block_Halt incorrectly implements
this by simply overwriting the error handler stack with the (extended)
halt handler stack, effectively throwing away all other _error_
handlers.

The only user of Try_Block_Halt is CATCH/quit. The effect of the
erroneous implementation is that CATCH/quit disables other (outer) error
handlers (TRY, ATTEMPT), as reported in CureCode ticket #851.

However, CATCH/quit only _wants_ to handle quit conditions. Error
conditions are simply rethrown by CATCH/quit. So we can fix this issue
by changing Try_Block_Halt to only catch halt conditions (but not error
conditions). This commit does exactly that, leaving us with two internal
functions: Try_Block, which only catches error conditions; and
Try_Block_Halt which only catches halt conditions.

Also comment similar patterns in top-level handlers which are actually
safe.

This fixes CureCode issue #851.
Merge branch 'fix-851-try-catch-quit' into community