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 'continue' would not actually change the observable behaviour

Incorrect. failedConn gets updated if we fall through.