proper alarm clock functioning?

test
Merge branch 'alarm_clock' into priority
some preemption logic that actually makes sense

what was I thinking?
changed some things

some odd anomalies in original code...

now ready_list is always sorted in increasing order by priority.  schedule pulls threads off the back.  yield, unblock, etc. all put the thread in sorted order by priority.  thread_tick only needs to check if the back of the list (highest priority) is higher than current priority.  it also still does the round_robin right now (max CPU time even if highest priority)
possible fix

list_back needs non-empty list.  preemption only makes sense if the ready_list isn't empty
more possible fixes
some more possible fixes for priority donation

actually keeping the ready list sorted and yielding when we need to, so the scheduler can keep up and preempt immediately as desired.
not positive that will actually happen ...
pointers ...
harsher scheduling enforcing
playing around ...
oops

typos
Merge branch 'priority' into mlfqs

Conflicts:
	threads/synch.c
	threads/thread.c