Added more kernel symbols for stack location and kernel start

Before the kernel start location and kernel end defintions were in two
places, prekernel.s and kernel.ld. Instead all definitions were moved to
kernel.ld (where it makes more sense) and now prekernel.s uses symbols
defined in prekernel.s.

Also added a symbol for the kernel start (same as stack start for now).
Added monitor flag to qemu target
Initial memory map reading code

The initial memory map reading code looks for the largest region of
contiguous memory and uses that for the kernel. It does some sanity
checks, but is otherwise dumb. There are a couple of other usable
regions which would gain a couple of MiB, but it's easier and 'good
enough' for now. It would be easy to extend this module to do a better
job of discovering available physical memory.

A call to mmap_init() has been added to kmain() as well.