Improve atomic memory access and support -mno-atomic.

Use CONFIG_GENERIC_ATOMIC64 if 32-bit.  Add system call to emulate
atomic compare exchange, primarily for targets lacking hardware
support (i.e., lacking RV32A, RV64A).  Support excluding use of
atomic memory instructions (-mno-atomic).

This change is mutually dependent on the corresponding change to
riscv-gcc.
I was reminded of `sys_or1k_atomic()`, but honestly it's fine to keep the `sysriscv` name in case of future expansion.  Names can be always be changed when the ABI is still unstable.

I suppose the underlying question is whether this syscall should be designated exclusively for atomic operations.  As with `sysmips` and `sysxtensa`, `sysriscv` tends to imply the role of a universal entry point for all machine-specific functions, which may or may not be a helpful approach depending on how we decide to gracefully accommodate the presence/absence of RISC-V extensions.

It's not exactly an urgent issue now; discussion can be left for later, when the kernel/user ABI is to be more widely reviewed and eventually standardized as part of the upcoming mainlining process.