Set default EOF char & fix tsh EOF buf

The keyboard driver recognizes 4 (ctrl+d) as EOF by default.  tsh no
longer blows up when get_line() gets EOF.
Add hex format specifier to printf et al
Close open files on processes exit
Replace sysstop() with exit()

sysstop() and sys_stop() are replaced with exit() and sys_exit(),
respectively.  These functions take an integer argument to conform with
the standard exit() prototype, but currently nothing is done with this
argument.
Fix bug in stack_pop() macro

list_remove_head takes a single argument.
New directory structure, recursive build

The directories under src/ have been moved into the root directory of
the project.  src/ is renamed kernel/.  bin/ and make/ are removed in
favour of building in the source directories, which is much simpler and
easier to maintain.

The build process is now recursive.  There is a makefile in each source
directory.  Generally these makefiles do little more than define the
objects to be built.

Additionally, some objcopy magic is performed in usr/ in order to link a
separate copy of klib.a into each user-space program.  First, the
program is compiled as usual to produce an object file.  This object
file is then (incrementally) linked with klib.a.  Then objcopy localizes
all symbols in the newly linked file except for the program's "main"
function, the name of which should correspond to the name of the source
file (so 'memtest.c' should define a function 'memtest' as its entry
point).  Since all symbols from klib.a have been stripped, the file
produced by objcopy should be safe to link with the kernel.
Build improvements

The linker script is now generated before linking.  This allows for the
names of input files to be discovered before the link and given to the
script as an INPUT (...) directive, instead of specifying the input
files statically in the linker command.

With the exception of usr, sub-makes no longer generate archive files.
Instead, they generate object files.  The main makefile then uses 'find'
to get a list of all the objects it needs to link.  An implication of
this is that sub-makes should only generate .o files if they're needed
for the link.
Use $(ROOT)/include instead of $(INC) in makefiles

config.mk assumes that $(ROOT) has been defined, and uses pathnames
relative to it.  Currently only $(ROOT)/include is needed in config.mk.