Refactor VM interface to kernel objects

Replaced the object_type_t mappable, get_page and release_page methods
with a single map function. The map function is expected to either map
in all pages right there (expected to be used by drivers for mapping
device memory), or set a pointer in the region to a vm_region_ops_t
structure which provides a get_page method for demand paging.

The get_page method is then expected to set a pointer to a page_ops_t
structure on each page it allocates, which currently provides flush_page
and release_page methods. This replaces the hardcoded use of vm_cache
functions in the physical memory manager.

Finally, mmu_context_unmap() has been changed to return a page_t pointer
rather than the physical address unmapped. All uses of the returned
address use it to go and look up a page_t. Since mmu_context_unmap()
itself has to do a page lookup to set the modified flag, this change
saves an additional lookup.

Signed-off-by: Alex Smith <alex@alex-smith.me.uk>