begin work on advanced scheduler
just 5 tests failing now
ALL TESTS PASSING -- JOYOUS OCCASION

However, the journey is just beginning. Just as there was room for
improvement after all the priority scheduling / donation stuff, there
are a few things I could have done better here. For one, I don't think I
should have 64 separate ready queues for the advanced scheduler, since
conceptually I believe it could just be done with a single queue, where
we pick the first ready thread with max priority as the one to run. This
has the added benefits of:
    1. No need for malloc (needed before since apparently our static
       space can't fit 64 list structs, boo), and therefore no need for
       weird location for initialization of ready queues in
       THREAD_START () -- this was especially weird since people were
       doing stuff with semaphores before the ready qeues were ready,
       which did work (after some refactoring) since there was no
       contention, but still seemed hackish and bootstrappy.
    2. No need for weird shuffling when priorities are recalculated
       every 4th timer tick, since we just pick the first list element
       with max priority. BONUS relative orderings of same-priority guys
       are preserved.