Improve initial connection and retries

This fixes #23 by having main re-use the code for failed connections, and #26 by having ConnectionMaker keep track of currently-in-flight connection attempts.  Also we use that info to improve the status slightly.
The previous design was: we tick every 5 seconds, regardless of when the next event is.
The first event (based off InitialInterval) is somewhere between 5 and 10 seconds, so we wait two ticks before doing it.

The current implementation changes InitialInterval but doesn't change the tick behaviour, so effectively we wait 5 seconds before doing anything.