mmem: Prevent duplicate init of mmem

This could seriously corrupt data if mmem_init was called again after
someone called mmem_alloc.
mmem: Implement mmem_realloc to properly change an existing allocation
MMEM: Allow 16-bit alligned allocation of memory.

This is quite handy when keeping structs in MMEM on platforms that only allow 16-bit alligned access to structs. Even the packed attribute does not help, when the struct itself is not 16-bit alligned.