Detect "#include *.c"

This prevents C files that are getting included from being compiled
twice.  Note that it's not entirely perfect: it's still possible to
build things twice by including both the C and H file.
Use LD instead of CC

This actually causes a difference sometimes: using GCC as a linker
seems to put a whole bunch of junk at the beginning of the output
file, which causes some tools (GRUB, for instance) to get confused.
Use -T for linker scripts

This seems to sometimes be necessary.  When I was linking today with a
particularly complicated linker script GCC gave me an error along the
lines of "You're using feature X in your linker script, but you didn't
pass -T, aborting".  "man gcc" doesn't say what would trigger this, so
I just gave up -- the man page says it goes everywhere, so it goes
everywhere.
Couple ASM and C

I can now include a header file from some C code and have it pull in
the cooresponding ASM file.
Fix ASM dependencies

I forgot to actually make ASM files depend on themselves, they now
have proper dependencies.  Note that this won't detect any sort of
Cleanup simple programs

I used to have all these simple programs in their own directory, but
that just added a lot of overhead.  I've moved them into the top-level
directory.
Add pnasm, a NASM wrapper

This allows me to build NASM files using a GCC-like wrapper.
Revert "Use LD instead of CC"

It turns out this isn't smart, I just need to figure out how to fix my
bug in another way.

This reverts commit e670d1fe4ec34732c68c416271d186b9df2e2c68.