I ran 4.0 via Cyanogenmod 9 on my Nexus S 4G for weeks, and unfortunately the bugs and constant app crashes got so bad that, as much as it pained me to do so, I went back to 2.3 yesterday. I love Android 4.0, but there doesn't seem to be a good, stable implementation of it yet.
Example issues:
* Random reboots
* Choppy playback in the Music app
(Amazon MP3 worked fine)
* Random app crashes, particularly
games (possibly due to lack of official
4.0 support)
* Poor GPS performance, occasionally taking
15-20 minutes to acquire a position (typically
solved more quickly by rebooting, but it takes
several minutes to know there's a problem in the
first place)
It's difficult to blame the app crashes on the OS if the app doesn't claim to officially support 4.0, but that's still reason enough to wait.
I'm eagerly awaiting the day that CM9 is released, or MIUI releases their official 4.0 version, but until then I think it's better to stick with what works.
I've had ICS on my Nexus S for a few months now and I've not seen issues like that. I'm just using the standard Google image (AFAIK, my brother did the upgrade for me - Android 4.0.3, kernel 3.0.8-gb55e9ac). I do see a lot of battery drain when I'm using the GPS, and I don't play games, but no crashes.
In my experience, the stability and performance of various peripherals like GPS and the WiMax radio are about as good as the stock 2.3 ROM. I haven't even noticed a change in battery drain...
Definitely CynanogenMod. Probably (I haven't checked them all) the most complete and best testet Rom out there. Available for nearly every major Android hardware.
It is very phone specific for ICS right now. When Cyanogen 9 comes out there will be more 'standardization.' For now, I'd look up the dev forum for your phone on xda-developers and see if there are any good options.