Initial implementation of recurring tasks
dispatch worker thread never wakes up

sometimes the dispatch worker thread will sleep at the same time a task is dispatched, so it never wakes up. changed the wait on the conditional variable to a timed wait, and made the wait timeout configurable.

also added empty() function to dispatcher
Move Dispatchable class into a new file
refactor Dispatchable class into an interface and subclasses
wake worker thread when start is called and thread is already running
add iterative dispatchable
add ability to disable worker thread's wait behavior
this allows the dispatcher to perform in real-time applications