mmu: Separate page table population and allocation

In preparation for demand paging, separate page table population and
allocation. The code is taught to deal with non-present PTEs that have
an address of zero (i.e. pages that are demand faulted-in).

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
mmu: VMA permission flags

Add permission flags to VMAs. They will be used by mprotect() and the
page fault handler.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
x64: Add error code to page fault handler

Add page fault error code constants and pass the error code to
page_fault() function from entry.S.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
x64: Nested exceptions

Add support for nested exceptions in x86-64 architecture code.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
mmu: Anonymous memory demand paging

Start using demand paging for anonymous virtual memory.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>