Need to call generic_yield on syscall blocking
Do accounting on number of schedulable threads
Set prefered vcq to current vcq, not previous

This was a bug that resulted in a thread never actually migrating when pulled
from another queue.  It would just reset its preferred vcq back to the one it
was pulled from, instead of updating to the new one.  This meant it was placed
back in the old queue once it yielded, rather than the new one.  Now it is
migrated correctly.
Choose random from num_threads(), not nr_threads.

The two may differ in real time as the program runs, and we want to actually
pull from num_threads(), since that is the more accurate count.
Use active thread count to load balance when stealing allowed