core: align stack on a 32bit boundary

Fixes #1267.
`char` is per definition one byte, so this is the smallest misalignment you can do. After `char c` the compiler has to add as many bytes as needed to make `T t` aligned.