core: align stack on a 32bit boundary

Fixes #1267.
Not only hardware, but ABI dependent.

`__alignof__ (void *)` tells you the minimum alignment. This builtin can be emulated  with 
```c
#define ALIGN_OF(T) (offsetof(struct { char c; T t; }, t))
```