After trying it a couple times, I have to give the "Sleep Cycle" app a wholehearted endorsement. It uses the accelerometer in the iPhone to detect movements during your night of sleep, and you place it under the thin bedsheet in the very corner of your bed so a) you don't knock it off the bed, and b) it can still detect movement. Rather than set a specific time to wake up, you say you want to wake up by a certain time, and the soothing alarm goes off when it detects that you are in the lightest part of your sleep cycle. For example, this morning I said I wanted to wake up by 6:15, and it woke me at 5:57.
It's obviously not an exact science, but the last couple mornings have been the best wakeups I've had in a long time. When you wake up, you can see a graph of your overnight sleep, going from REM to mid-sleep to light sleep and back again. I was skeptical, but I'm extremely impressed. I didn't have my 4s on the charger and it only used about 20% of the battery overnight.