Reserve space for stack at runtime.
Adds support for STACK_SIZE make variable. When this is set to a
non-zero value, the heap's growth will not extend into this reserved
area for the stack. The MPU is also used to make sure that the stack
doesn't exceed this reservation. If it does then a memory fault will
occur. WARNING: These faults can be a bit difficult to debug since
they will encounter a stacking exception when they attempt to enter the
hardfault handler. It is possible to glean information manually from
RAM to figure out roughly what was going one when the stack overflowed
though since most of the stack still remains in RAM.