Enable paging, restructure memory managers

Paging is enabled and the first 16MB are now identity mapped.  No access
restrictions are in place yet.

The page frame allocation code has been moved from kernel/mem.c to
kernel/paging.c.  The code to set up paging structures and enable paging
is also in paging.c.
Fix old references in linker script

Replace references to bin/userspace.a with usr/usr.a.  Also, some linker
variables are defined to delimit kernel sections.

A bug where the user-space .rodata section was getting pulled into the
kernel .rodata section is fixed as well.
Initialize paging early in boot

Paging is initialized in boot/loader.s before kmain() is called.  This
will make it easier to link the kernel in the "higher half" of memory.
Move sysproc.c into user-space

These processes run in user mode, and so should be linked on user-space
pages.
Improve CPU exception messages

Instead of guessing where the error code (if any) is on the stack, just
print out a portion of the stack and leave it to the reader to figure
out what's what.  This has the advantage of being less confusing
(usually) and printing some additional useful information--in
particular, the value of the instruction pointer when the exception
occurred.
Put page tables in the .bss section

This will mark all pages as non-present initially.
Map first 4MB at 0xC0000000

In addition to being identity mapped, the first 4 MB are now mapped to
high memory.  The next step is to link the kernel at this address and
modify boot/loader.s to use relative addresses.
Move paging_init() call, write protect ro sections

paging_init() is now called from mem_init(), and takes two parameters
for the start and end of the page heap.

Some linker variables are added to sections.ld and are used in
paging_init() to disable the R/W bits for pages containing read-only
data (i.e. the .text and .rodata sections).
Rename 'data_start' -> 'data' (struct mem_header)

It should be sufficiently obvious that the data starts there.