This untangles our current connection logic and moves toward async connections/resolves. Before merging, I'd like to construct a matrix of different connection configs, and make sure that each one has test coverage. I'm PRing now to get a feel for whether this is reviewable as-is or not.
In short, switch from "here's what we know, connect please!" to "walk through the individual connection steps in-order".
This moves the entire process into one function, but the next step will be to break out the individual steps (input checking, resolving, connection, node creation).
See the individual commit messages for more detail.