added a couple of worthless comments.
Next step: multi-priority scheduler.
no idea what i did
fixed a bunch of dumb subtle bugs
finally fixed the entire central dispatch system.
fixed the scheduler more. priority isn't dynamic anymore, that was causing too many problems.
also implemented Multitasking::Block(), which blocks (ie. removes from run queue) until a message is received. TODO: make mutexes use this (perhaps by sending a message to itself?)
added some notes on mutexes
added yield and block system calls
reworked mutex system, more object based now and hopefully supports recursive locking.
also discovered a huge fatal destructive flaw: the scheduler will decrement sleep timers
every interrupt... which can be accelerated with YIELD() calls...
Separated scheduler from interrupt.
mutexes now use BLOCK() instead of YIELD(), UNLOCK() sends messages to waiting threads to wake them.
small fix: delete the wakeup message
scheduler now fixed
sleep now fixed
finally separated exception and irq handling.
kernel now gracefully (read: forcefully) terminates userspace threads (only userspace threads) when they fault.
threads are now somewhat more gracefully destroyed.
what am i doing
Hopefully added increased reliability by pushing r(a|b|c|d)x registers on ASM call interfaces, to reduce register thrashing.

(according to the ABI, rax, rcx and rdx are available for use and do not need to be preserved)
did not realise that getnextthread() did not remove from the list.
added dumb gimmick progress bar at the boot screen.
todo: make it such that exiting processes will send a kill signal and wait.
might involve including a file in the library that will be the first thing to run
added gdb for x86_64.
Also started experimenting with more versatile LinkedList class.