[libc] introduce hardening mode and add heap integrity check as example (#210373)

This PR originates from #205382.

Heap sanitization helps us to proactively detect UAF and DF. According
to the discussion in #205382, we separate this feature out from
hardening concerns.

Together in this patch:

1. We introduce `LIBC_HARDENING_MODE` similar to `libcxx`'s counterpart.
2. Introduce `_LIBC_ASSERT(COND, MSG)` as an always-on assertion macro
and forward original `LIBC_ASSERT` to it under debug mode.

Side note: I notice that LSB actually say that assert failure needs to
**abort** the program. We need to fix that. `abort` allows reentrancy
(recursive assertion failure) but current pure-header-library style
makes cyclic dependency unavoidable. This should be cleaned up later.
Opened as https://github.com/llvm/llvm-project/issues/211348.

Assisted-by: Gemini powered automation tools (human-in-the-loop).
GitOrigin-RevId: 45f1b25a0d069a2cee0632e1d1df4ff3342f136e
16 files changed