This eliminates page free lock from use in reservations except immediately around phys allocator calls. I do this by protecting reservations with their own lock and using atomics for free_count. The allocation functions 'reserve' their free count before going off to find the pages. They return it if they are unsuccessful. This possibly does result in some false blocking but it should be minimal and well tolerated.
I originally tried to protect reservations with the page lock but this resulted in page -> pmap -> page lock reversals.
The alloc/extend function split up now doesn't make sense. I did not predict correctly how this would all end up. I will make this more attractive in a later diff.
The majority of the contention is now on the lock that protects partpopq. I believe we can place some limit on how frequently we update the list and make it 'fuzzy'. Either by time with ticks or by requiring N page adjustments before shuffling the list position.