I'm a little late to this discussion, but i just wanted to say that I'm +1 on potential solution #2 (Change bracket to use uninterruptible cleanup handler).  I remember I was really surprised the first time I studied `bracket` precisely because of this weird interruptible cleanup behavior.

Sensible defaults matter, and `bracket` by virtue of its simpler name is the implicitly suggested default.  I'm also pretty sure that the amount of breakage will be minimal and easy to fix (the very few affected libraries can just use ifdefs and bracketInterruptible to work around this) and the amount of fixage will be maximal.