VIRTUAL MEMORY finally works

After vm_bootstrap is called we have the following is true:
 1. Paging is ENABLED.
 2. The lower X MB of virtual memory is _direct_ mapped to the same
    region of lower memory. This is just so that we can continue
    executing code in the kernel (the kernel image starts at 1MB).
 3. The upper X MB of virtual memory is mapped to an identically
    sized, continuous region of physical memory. This region of
    memory is than passed to the kernel's dynamic memory manager
    (mm/lmm). Thus, all kernel dynamic memory (so...everything
    but static kernel data/text) will allocated here.

Importants:
 - This virtual memory is using statically allocated page directory
   and page tables (because we don't have dynamic memory until we
   have virtual memory). That's why this is called vm_bootstrap.
   Once we start setting up user processes, we should switch to
   dynamically allocated everything.