This will allow us to properly do interrupts for XHCI devices in the
future.
Also move PCI device header parsing to a shared library.
Get rid of the old irq register format which supplied an irq number and
instead pass the appropriate irq number back out to the caller.
We enabled interrupts before getting the value of cr2 in the handler.
If the handler was preempted, cr2 could have been overriden by a page
fault in a separate thread or process.