Hmmm. If you are getting to the point where it is saying that it will transfer, then for sure you are actually making a connection fine, so port forwarding is not the issue at all.
To clarify, are you actually in the lobby when your friend is trying to connect? If so, there really is not much data being passed over (comparably speaking), so I wouldn't think it would be barfing on the amount of data or something. If it's doing this after you start the game (or as you start the game), then that's another matter and typically is a bad network driver that needs updating. BUT we also have a workaround for that, in the form of the "Network Sync Size" setting in the Game tab of settings. On the host, you might want to change that to something that is a larger form of N/X. So N/2400 would be the smallest batch, for instance. Make sure that Skip Batch Network Sending is not checked.
On both the client and the server, you can hit F2 while you are seeing this stall out, and see what it is doing behind the scenes, too. A screenshot of each of those would be helpful from our end, after you let it run for 30 seconds or so if it is stalling. It's possible that you're having a ton of resends for some reason.
If you're having a ton of resends, then downing the size of your Maximum Transmission Unit (MTU). That's the number of bytes that each packet is allowed to be, maximum. Generally the default of 1400 is pretty safe, but on some ISPs they will actually split the packets further so they are no larger than (say) 10000 bytes, and then you wind up with a bunch of confusing packets that the network library has to reassemble. Usually that works, but it is slower for sure since routers are doing odd things in the middle and making extra work. But in some cases it doesn't even work, or the routers just outright reject the larger packets.
The reason why you would be able to do the initial connection is because those messages are super small and so they would not have triggered anywhere near the MTU limit, or hit the bug in some network drivers getting flooded with messages and not queuing them properly. If you're running into this problem in the lobby itself before you actually even get to the point of trying to hit start game, though, then my money is actually on MTU and a very oddly configured router somewhere between the two of you (probably some ISP).
One last-ditch workaround to odd ISPs is to use some sort of VPN software, like Hamachi or Commodo. Those take whatever data you send in, wrap ALL of it (because they are also encrypting it and sending it through their own custom port), and then unpack it on the other side, so there are literally no raw packets from the game going anywhere except to the virtual VPN driver on your machine, and out of the virtual VPN driver on the other side. Given the nimbleness of VPN software at dealing with all sorts of funky network setups (that's the whole point of that sort of software), it tends to work where mere mortals fear to tread.
But that's usually a last resort because it's an annoyance to set up new software just for that purpose, and there is some slight tradeoff in speed of game networking because of the wrappering of packets that the VPN does (the encryption makes them a little larger, for instance).
Hope that helps!