Changed the I/O APIC Interrupt relocation stuff
algorithm.h fixes and additions

* Fixed the std::max() implementation
* Added a std::fill() implementation
* Added a std::copy() implementation
Changed the interrupt handler signature

Interrupt handler now need to return a new esp and get the old esp handed over instead of the interrupt vector
Queue and Singleton implementations
Began working on a SMP aware scheduler

Right now it doesn't do any real scheduling, it just creates an idle task with an idle thread for every active CPU core that is then run indefinitely