Finally finished the more robust PCI-object system. Also tweaked it so only what is required is allocated, and packed the PCI and HeapHeader/Footer classes for less memory wastage.

Had to move some initialising around, but PCI devices are now probed and stored before the LFB is initialised. No second probing is done, it prints from the array.

The kernel memory map (K_MemoryMap) is now a memcpy() of itself, moved to a spot in the Heap. The PCI objects were unfortunately trashing it.
Added a pretty comprehensive string class, under Library::Types::string. Also had to move some files around to fix conflicts. Also added a function to search by class and subclass (for ATA DMA later on) for PCI devices.
Fixed some oversights in the heap implementation.

Also, the VMM now draws memory for page structures from a reserved region 3MB large directly after the kernel.
Slightly more elegant than the old pre-mapping trick, but is no longer infinite; it'll last for 768 allocations before it will catastrophically fail and start overwriting previously allocated memory.

Also cleaned up more header files, we should be rid of them by now. Next step is ATA DMA, given the heap can now allocate large chunks (0x10000) at a time without crashing or faulting.