Make several amendments to the paging code to facilitate process memory management:
- Move definition of struct region to kernel-wide arch.h header
- Make page directories refer to their regions through a pointer array rather than a linked list
- Add pg_dir_foreach_region() function for iterating over the mappings in a page directory
- Add pg_dir_map_region() function for mapping a region from one page directory into another
- Add a reference counter to each region
- Add flags to regions so they can be marked as private, shared, or kernel-related