Make delay derived from runnable

This is an intermediate implementation.

Now the set_result, set_callback, and forward member functions of the
delay class template return a pointer to a runnable. They currently
return nullptr, but will be changed to possibly return this to reduce
the size of the stack used in sequential callback calls.
Return runnable pointer from delay callback

Now the set_result, set_callback, and forward member functions of the
delay class template return this when the result and callback are both
set. The caller is responsible for running the returned delay as
runnable.
Add dedicated type for delay callback

This commit is a refactoring adding a type for delay callback.
The std::function<callback> type is replaced by
std::unique_ptr<callback> which is typically smaller. The new type can
also reduce memory use because non-movable callbacks no longer have to
be wrapped in shared_function.