Introduce KASAN support for the riscv architecture. The implementation is similar to arm64.
Additionally, this patch refactors the generation of KASAN atomic interceptors in sys/kern/subr_asan.c:
- The Problem: KASAN previously forced the declaration and generation of atomic interceptors for all widths unconditionally. This breaks on architectures like riscv that lack some sub-word atomic implementations.
- The Solution: Instead of bloating the code with massive #ifdef blocks, this patch introduces macros (e.g., ARCH_SUPPORT_ATOMIC_*_WIDTH) to declare what the architecture supports, allowing us to conditionally generate these interceptors. The MI code defaults to declaring support for all atomic operations, while MD code can exclude unsupported operations by #undef and overriding the specific ARCH_SUPPORT_ATOMIC_*_WIDTH macros they lack.