This adds support for 4 level pagetables. To help this it adds two functions
to find the lowest table level, and lowest block/page level. It is expected
this will be useful later to support superpages.
The kernel address space has been kept identical for now, however I epxect
to move memory around later to support a larger DMAP region.
This patch is mostly extending the existing code to use the extra level.
It's not quire ready to be committed, there are a few bits in locore.S that
still need a cleanup, but the other parts are ready for feedback.