Rename gcc4mbed.c to gcc4mbed.cpp

This code has always been compiled as C++ in the past anyway because of how the
mbed online compiler did things originally.  Now I want to actually use C++
code in this file so about time to make it an actual C++ file to reduce
confusion.
Merge branch 'edge' into track_allocs
Add heap tagging.

Now keep track of the caller who requested each dynamic heap
allocation.  This adds 4 extra bytes to each allocation to store the
return address of the caller at the end of the allocation.

To enable:
set HEAP_TAGS=1 in the main Smoothie makefile.

To dump heap in GDB:
I have added a .gdbinit file to the root of the Smoothie project.  If
you load this into GDB (will be done for you if you start GDB in this
directory) then you will get a heapwalk command.  Issuing the
'heapwalk' command in GDB will dump all of the current chunks in the
heap and display which line the allocation was made from.  You can
take multiple dumps as you run the code and diff them to see if there
are leaks and if so where they are coming from.

Sample Dump:
Allocation: 8  Address: 0x100020E8  Size:228  Line 73 of "src/main.cpp" starts at address 0x5a4 <main()+80> and ends at 0x5b0 <main()+92>.
Allocation: 9  Address: 0x100021D0  Size:44  Line 35 of "src/libs/Kernel.cpp" starts at address 0x12b8 <Kernel::Kernel()+144> and ends at 0x12c4 <Kernel::Kernel()+156>.

Errors:
If you get the following error output when you run heapdump then you
haven't enabled the HEAP_TAGS makefile variable to build in the support
for this feature:
  (gdb) heapwalk
  No symbol "__smoothieHeapBase" in current context.
Ignore gdb.txt log files.
Merge branch 'edge' into track_allocs

Conflicts:
	gcc4mbed/src/gcc4mbed.cpp
WRITE_BUFFER_DISABLE support in makefile.

Setting to WRITE_BUFFER_DISABLE to 1 will configure the MPU to disable
write buffering and eliminate imprecise bus faults.  Can make debugging
write faults easier.
Merge branch 'edge' into track_allocs
Merge branch 'edge' into track_allocs

Conflicts:
	gcc4mbed/src/gcc4mbed.cpp
Check for double free with HEAP_TAG.

If you enable HEAP_TAG, now wraps free() calls to make sure it isn't
already freed and debugbreak()'s if it is.
Merge branch 'edge' into track_allocs
Add maxstacksize command for GDB.

Fills the area of SRAM between the top of the .bss section and the
top of the stack.  Can be used later with the maxstacksize command that
I added to .gdbinit.  This command searches the area between the
heap and stack to find where the fill has been overwritten and assumes
that the stack has grown into that area at some point in time.  This is
used to calculate the maximum stack size used.
NOTE: If your heap does ever shrink, then the maxstacksize command will
      be confused.  However, this has been a pretty rare case for
      Smoothie recently.

Also added these other commands:
heapsize - Displays the current heap size.
stacksize - Displays the current stack size.
Fixed spelling error in lpc21isp URL in README file.
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.
Merge branch 'edge' into track_allocs
Merge branch 'edge' into track_allocs
Merge branch 'edge' into track_allocs
Merge branch 'edge' into track_allocs
Merge remote-tracking branch 'origin/edge' into track_allocs
Keep memory options together in makefile.

Moved the STACK_SIZE option up closer to the HEAP_TAGS and
WRITE_BUFFER_DISABLE options.
Switch heap start from __HeapBase to __end__.

I verified that these symbols point to the same address by diffing
the before and after main.bin output files.  This change caused no
change in the resulting binary.

The use of the __end__ variable is just more correct since it comes
from the linker script.