checkasm: Try to handle crashes more gracefully
Tested on x86-64 Linux, MacOS, and Windows. Seems to handle the most common errors such as misaligned memory accesses, minor stack corruption, and use of unsupported instructions flawlessly.
The main benefit is that checkasm will now actually tell you which function crashes instead of just aborting.
Debuggers will still be able to break on those events as normal (tested with GDB and LLDB).
Of course, if some piece of code ends up misbehaving too much and clobber the wrong parts of memory then things will inevitably crash and burn spectacularly anyway, but there's not much we can do about that.