Add event system for subscribing to time events

In the TimeMonitor thread we check the current time every 20 seconds and
fire an event with the current time. We can tie any methods into this
time pulse and fire them as needed. It will be much easier to implement
these methods now.

This is a pretty big change, but confirmed it works with the current
backup system.

fixes #15