[runtime] Add two variants of mono_gc_bzero and mono_gc_memmove. They better convey the behavior we need.

After reviewing all usage of mono_gc_bzero and mono_gc_memmove, I found that there are two usage patterns
we care for:

1)Aligned pointer, any size, have managed pointers.
This happens when directly dealing with managed objects like when cloning of boxing.
On this case, all pointers MUST be aligned.

2)Maybe aligned pointer, any size, might have managed pointers.
This happens for functions dealing with structs, specially around boxing and unboxing them.
Our data layout code ensures that structs with managed layout are aligned to at least a word.
This means that if the pointer is unaligned, no managed pointer can exists in the memory range
been processed.

Given those two scenarios, lets introduce two variants that enforce those constrains.

_aligned:
Pointers must be aligned, ensures atomicity of word copies;

_atomic:
If pointers are aligned, works like _aligned, otherwise it inherits the behavior of the
system memmove&memset.

The above split ensures we won't have to deal with any RISC unaligned load nonsense.

It also adds some sanity checks to code that must respect alignment.

We still need fast code for mono_gc_memmove_aligned and mono_gc_bzero_aligned.

We still need to verify if a version of memcpy version is needed. Maybe the extra
branch is not such a perf penalty.