Add timer functionality to the async IO framework.

This supersedes #73, and moves the timer processing into `UnixEventPort`. The times are specified as std::chrono::time_point values. Only "steady" timers are implemented for now, although the hooks for "wall" timers are already shown in TimeProvider.