A bit of an experiment, because I'm not really happy with fmap/funmap's rounding because it's not obvious what is already page-aligned and what isn't.
This data type will only ever hold page-aligned numbers (numbers that are divisible by
PAGE_SIZE). The runtime check/rounding is executed once, and after that the type-checker takes over to ensure we only perform safe actions.
This type offers a way to add/subtract multiples while retaining the page-aligned type, since
kx + ky = kz. More safe operations should be implemented, as needed.
The goal for this type is to slowly consume more parts of Redox OS' memory logic, eventually making it easy to verify with a simple glance that code is correct.