mmu: File-backed VMA dirty page tracking

This adds a dirty page tracking to file-backed vma.  Dirty pages are
tracked with 4K granularity in a std::vector<bool> bitmap in file_vma.
The file_vma::fault() handler updates the bitmap on write page faults
and then remaps the pages as read-write.  If we fault on a huge page, we
simply set bits for each of the 4K page in the huge page range.

Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
mmu: Don't write out clean pages

Use the dirty page bitmap to avoid writing out VMAs that only contain
clean pages.

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