Refactor Overlay, HTTP::Server for universal port

These refactorings are required to support the universal port.
Reviewers: @miguelportilla, @scottschurr

Ignore the top 3 (eefc5d9..0ebc9ee) they are from another pull request.
I know what you mean. But there's no sane way to avoid it. You can have shutdown functions in addition to destructors that block. But they are not a substitute. You really need the destructor to enforce invariants. What if something throws and the object has to be unwound? You can't call a shutdown function anywhere other than the destructor. Or does every function now have to catch the exception and call the shutdown on such objects?