kernel: added a memory tracer that writes data to the second serial port in a specific format, for analysing memory allocations

We also now build a debug version of every module and the kernel, these contain full debugging symbols for maximum debugging ease.
scripts: memorytrace.py - run this in the root of the repository with the output file from a memory trace to do analysis.

Pass in any combination of the following:
* 'unfreed' to see all blocks left unfreed
* 'counts' to see the distribution of allocated sizes
* 'toobig' to see allocations that may be better placed somewhere other than the heap