kern: mmap: make the lowest mmap address MiB; mmap ld.so at MiB

We spent a day debugging a bad pointer that was the wrong bad pointer;
it was actually a data corruption of a null pointer that changed it to
ff00, which was valid memory since we load ld.so at 4k. As it turns out,
it's easier nowadays to get a deref via a NULL pointer struct to not take a fault
if you have anything mapped at anything less than 1M; structs are big.

Map ld.so at MiB; don't allow mappings lower than MiB. This doesn't fix
the go runtime problem, but it would have let us find the issue
several days earlier. And, since this is a common issue, might as well
avoid it in this instance.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>