Initial work for implementing fork()

TODO: copy address space and figure out how to "return to child".
Extended mm/pages functionality

Added {reserve,fulfill,refcopy}_pages() functions. Also cleaned
up mm/vm.c a bit. Trying to firgure out how to design the vm system
with regions...
Implemented new pages_{alloc,free} interface

This will prevent the need to kmalloc arrays every time you need
to allocate some pages. In addition we have a data type (struct page)
that can be passed around to represent a physical page.

The downside the new approach is that allocating > 1 pages will only
look succeed if it can find n contiguous pages.

TODO: there is a wrapper interface around the new implementation and
interface. Need to remove the code that uses the old interface but
that will require a large rewrite of everything else.