Currently, the AutoNAT dialer spins up a full host with identify, ping, etc.
this switches to a blankhost.
This also avoids running a relay, listening on transports, etc (regression).
Instead of using a global variable.
This also:
* Adds an option to the identify service to set the user agent.
* Removes the ability to pass an identify service to NewHost as any reasonable
Identify service already needs to be constructed with an instance of the host.
0. I imported whyrusleeping/go-smux-* into go mod.
1. To handle post-1.0 tags, I renamed all of our "gx" tags to "gx/v..." as we
did with the rest of libp2p.
2. This broke _everything_ because `go mod` absolutely can't deal with deleted
tags if any transitive go.sum file mentions the tag.
3. To fix this, I first got rid of all mentions of these 2.x+incompatible tags.
4. Unfortunately, I realized this was still going to be a nightmare for
downstream users as a `go get github.com/libp2p/go-libp2p@latest` on a fresh
clone (no go mod cache) would fail. I didn't want to have to explain to all
of our downstream users "please delete your go.sum files!".
5. So I did what I should have done in the first place:
a. I restored those tags.
b. I forked all the whyrusleeping/go-smux-* repositories (and
whyrusleeping/yamux) into the libp2p org where.
c. I removed all tags but the _new_ go-mod tags on those new libp2p repos.
What does this mean for downstream users? If they manually import any of these
stream muxer repos, they'll have to fix their imports. Otherwise, it shouldn't
make a difference.