Modernized a few bits of the assembler

* Added local labels to the idt_entry_handler and spinlock_xxx functions to reduce label clutter
* Refactored the spin lock code a bit. It no longer requires 4 bytes of stack space and the overal instruction count got reduced a bit
Fixed a SMP race condition in the scheduler