Add PRECONDITION macro
Extract queued_task from message_loop

Add:
* time_delay
* _ms user literal which converts to std::chrono::milliseconds