AAPCS requires stack pointers to be aligned on a double word boundary.
In addition, Clang-3.6 assumes the stack pointer is always aligned to
a 8 byte boundary upon function entry, at least in armv7-m, causing
hard-to-find errors in the compiled code.
Clang 3.6 is stricter than GCC and previous releases of Clang regarding
naked functions and now only allows inline asm inside naked functions.
This is a refactoring of the functions isr_pendsv, isr_svc,
context_save, context_restore to still be naked functions but allow
building with Clang 3.6