Wq random default

Current scheduling default is arbitrary as the result of the data structures used (e.g., a hash table). With this branch the default scheduling chooses available workers at random. This achieves two main objectives: 

1) It makes clear that the default scheduler does not make any arbitrary decisions, and also does not try to be 'smart'.
2) It forces us to separate policies from their implementation. Using hash_tables, some workers were more likely to be selected to run tasks than others. This is not a bad thing by itself, but this selection was arbitrary, and it did not follow any policy.