Start on packaging up the re-execing behaviour

Taking behaviour from the double_exec example
Use a waitgroup to block reExec until ready
Temporary means of waiting for serving ready
Add a mutex around the listeners map
Merge remote-tracking branch 'origin/upgrade_logic'