libroot, kernel: Introduce atomic_{get,set}_aligned() functions

Atomic accessing unaligned locations in memory is very costly on x86
and x86_64. It may require locking the bus and is not wait free.
Moreover, atomic_get() writes to the location the value is got from
what may result in cache line bouncing and abortion of a memory
transaction.

atomic_{get,set}_aligned() functions assume that access is to an aligned
memory location what on x86 and x86_64 architectures reduces these
functions to just simple mov operation and an appropriate memory barrier.
In a result bus is not locked, both functions are wait free and
atomic_get() doesn't perform any write operation on shared memory location.

x86 versions of these functions use "lock; addl $0, (%esp)" which acts
as a full memory barrier. Despite explicit "lock" prefix, the bus is
not locked as long as top of the stack is in the cache (what is a safe
thing to assume). Also, since the thread stack isn't supposed to be
accessed by other threads this instruction in most cases won't invalidate
any cache line on other CPUs.