clockworker 0.2.3

A single-threaded async executor with EEVDF-based fair scheduling and pluggable task schedulers
Documentation
<!-- 1) Add shutdown to runtime -->
<!-- 2) Add couple more schedulers e.g. SRTF, LAS -->
<!-- 3) Add tests that verify it can work with other runtimes -->
<!-- 4) Change class from i32 -> u8, don't use hashmap but vec<option<queue>> -->
<!-- 5) Base it on new linux scheduler - deadline, min vruntime, sched_latency, 
   <!-- min_slice, and driver_yield --> -->
<!-- 6) Build basic stats -->
<!-- 7) Allow queue to configure panic behavior -->
8) Allow queue to configure some debug on futures taking "too long"
<!-- 9) Allow spawned tasks to inherit parent's properties? -->
10) Enable LIFO optimization in some cases?
<!-- 11) Add yield_maybe -->
<!-- 12) Add test to verify bad executor can't be created (0 shares, duplicate ID) -->
<!-- 13) Add test to verify that panic on task causes the whole thread to panic -->
<!-- 14) Make key system generic over Eq + Sized -->
<!-- 15) Add arrival_time and root_arrival_time per task, send to enqueue. Or should
    we add parent_taskid? -->
<!-- 16) dont' make spawn return error - if not accepting, make tasks canceled -->
17) Option to enable stats
<!-- 18) Configuration builder (e.g. sched_latency etc.) -->
<!-- Remove mpsc2 -->
<!-- Add method for with_queue and with_queue_having_scheduler -->
Change tcp benchmark to not have handle.await and instead do shutdown signal
<!-- Add fast path where there is only one queue - bypass vruntime etc. -->