[warning, rant ahead]
The basic highlights is that it's meant as a replacement of TCP that offers high end to end security at decent performance. It's implemented on top of UDP and has a whole bunch of rather nice security properties (mutual authentication, confidentiality, integrity and better availability than TCP in the face of attacks).
The reality is slightly less rosy than the website makes it out to be. Notably, the congestion control algorithm (Chicago) still seems to fare poorly in real world networks dominated by hostile TCP algorithms, despite the original claims that it manages to wrangle a fair share of bandwidth. But still, it's a neat protocol. The hard bits of its implementation are the crypto primitives (an elliptic curve, a stream cipher and a couple other bits and pieces) and the congestion control algorithm (mostly because it's not specified other than in the code for the reference implementation).
Why won't IPv6 solve anything? Basically, "NAT traversal" is actually two different problems smushed together. One is conntrack traversal, i.e. tricking a firewall's connection tracking logic to let in outside traffic without a formal client-to-server handshake. NAT adds an extra layer of difficulty by making the address and port of the connection hard to figure out.
IPv6 will eliminate NAT, for the most part. However, it very likely won't eliminate connection tracking firewalls from the picture, especially in consumer-grade equipment where the expectation is that you run no servers, and thus only want to allow traffic related to LAN-initiated connections back into the LAN. In theory IPv6 would be all about end-host firewalling, but I sincerely doubt consumer grade equipment will ever give up and be just a dumb router. Dumb routers with no feature checklist don't sell.
Also, IPv6 won't eliminate NAT. There are several NAT mechanisms specified: for v4 to v6, for v6 to v4, and even v6 to v6 for enterprisey multihoming using "unique local addresses", which are the philosophical equivalent to the v4 private IP ranges, only without the risk of inter-LAN collisions when you merge networks. As long as one of these mechanisms still exists, a traversal library that wants to maximize the probability of success needs to handle NATs anyway.
So, while IPv6 will mostly eliminate NATs, it won't significantly ease establishment of peer to peer connections from networks you don't fully control. Fortunately, the ICE algorithm, stripped of all the VoIP-specific stuff, works just fine in IPv4 and IPv6, and is pretty damn close to working everywhere (it still fails in a few specific cases, typically involving two enterprise networks with symmetric NATs).
Note that UPnP and NAT-PMP can still fail in situations where ICE would succeed, even if the router on your network understands and complies with your request. If you have nested NATs (e.g. an ISP's modem+router with a consumer wifi router plugged into it, and machines hooked off of that), UPnP/NAT-PMP will only "see" the inner NAT device, and will only open a pinhole on it. The second NAT device will still scramble the address/port, making the connection fail.
ICE would succeed in this scenario, because it obtains NATed address information from the public internet, which is assumed (mostly correctly) to be the no-man's-land between all the layers of NATing. ICE doesn't really care about how many NATs are on the way to the target, as long as it can query a server on the internet for what the front-most NAT is doing.
But, of course, there's also a couple of cases where ICE would fail and UPnP/NAT-PMP would work. Sometimes, the nested NATs are intentional. This often happens on university dorm networks, where the dorm as a whole is NATed to the world, and each student has their own wifi router. In this case, if two students wanted to connect, using UPnP/NAT-PMP on their personal routers would allow them to connect through the "middle NAT", never touching the university's NAT device. ICE on the other hand would decide that the public address for both students is on the university's NAT, and the connection would very likely fail, because few NAT devices support "hairpinning" back into the LAN.
The most ideal scenario would be to use UPnP/NAT-PMP to obtain a pinhole, and provide that pinhole address in ICE's handshaking logic. That would enable ICE to connect two students, or a student and an external party. Even better, ICE would likely (depending on tuning params) pick the optimal network path for each type of connection, without having the user specify what their network topology is.
Did I mention how much hatred I have for all this crap that prevents two computers who want to talk from just talking? :-)
- Dave