I feel your pain... My son started this at three as well, his baby brother didn't come home until he was 3.5, so luckily we had some time to work on it.
What I did was get a digital clock for him, and discuss his bedtime with him. Part of his issue was that he really didn't need a nap anymore, but he got one at daycare, so we had to adjust his bedtime later one hour. That helped, so now he goes to be at 9 instead of 8.
Then referring to the clock, we would start getting him ready for bed at 8 pm, and tell him that he could have as many stories as he had time for. If he dawdled, I remind him he is using up his story time, but other than that, I am not stressed. I just keep repeating it, and reminding him about the time. Then with about 15 minutes out, I get a little more forceful, but he does respond when he knows time is running out. The trick is, once it is 9 oclock, I tell him he is on mommy's time, and I cut him off ( I won't stop a story in the middle, but won't start a new one). Just like anything, we had fits for a few days, as he kept getting out of bed, but it settled down pretty quickly and now he is fine, and knows what the clock means.
It makes it much easier, when they whine "just one more mommy", to show him the clock and say there isn't time. Then it isn't you that is just being mean, they see there is a reason. Plus it teaches them the consequences of their actions, if I am speedy I get lots of stories and playtime. If I pitch a fit and am slow, I only get one story.
Hope this helps.