Cleanup
More fatal but still disablable assertions on non-DEBUG builds
Make Log user-overridable, as long as it's a macro.
Lightweight DebugBreak using __builtin_debugtrap when available.
Implement NotReached on non-DEBUG builds using __builtin_unreachable

On DEBUG builds, control still can't reach end of non-void function
because abort is marked noreturn.