This revision removes most of the code for implementing PG_CACHED pages. It does not remove user-space visible fields from vm_cnt or all of the references to cached pages from comments. Those changes will come later.
There are some callers of vm_page_alloc() that can be simplified a bit. For instance, shm_dotruncate() no longer needs to check the valid bits of the page returned by vm_page_alloc(). I believe the valid bit check in vm_page_grab() can be removed as well.
I'd like to propose some refactoring: Move the vm_phys_freecnt_adj() back to the callers, leaving only the KASSERT()s in this function. (This is actually an optimization for vm_page_alloc_contig().) Rename the function to vm_page_alloc_check(), and move the calls to a point after the free queue lock is released.