I've been using Cyclemeter. I carry the phone in a jersey pocket: Cyclemeter can provide spoken status updates at regular intervals, so you don't need to look at it, and I've found that those periodic "30 seconds behind best" announcements really light a fire under me. If I do find that I need to check my bearings, it does have a map view (and of course, one could break out of it to open the Maps app).
I was using it with a 3G that had probably lost some battery life, and could get about 5 hours of continuous use in Cyclemeter out of it, but I would usually carry a little "emergency charger" with 2 AA batteries just in case (I never actually rode 5 hours with it). I recently got an iPhone 4, and have found that 4:30 of continuous use doesn't run the battery down to the halfway point, so I don't bother carrying the emergency charger now. I am sure that the fact that Cyclemeter is designed to operate in pocket mode is what keeps its battery consumption low. I've tried several other apps, and I like Cyclemeter best. Haven't tried B.icycle or Runkeeper--those both look like worthwhile contenders.
For plotting out new routes, I like to map the route out on my computer in Google Maps and save it under "my maps." The only iPhone app that I've found that can access "my maps" is Google Earth, so if I need to refresh my memory on a new route, I break out of Cyclemeter and open Google Earth. The inability to import kml or gpx files to Cyclemeter is one of its few real shortcomings.