I have 4 children ages 4, 4, 2 and 1...the three older ones have all gone through this.
Do you have a quiet place that's out of the way where you can have him sit by himself for awhile...near you, not in his room, but out of the way enough that he feels left out. We call it the "no fit corner". We have a small hallway off of our living room that ends in a bathroom that we use. When my kids throw a fit, I tell them to go to the "no fit corner" to calm down. They are told to stay there until they can talk in a big boy/girl voice or are ready to stop whining. They don't like to go there because it is boring and no one is there listening to them throw a fit. They learn that the way to communicate is using a big kid voice, they don't get attention when they whine and they miss out on fun when they want to cry. It is not a "time out" so to speak because the child is allowed to come out as soon as they are calm.
The first couple of times I put a child in the "no fit corner", as soon as they start crying, I say in a calm voice, "if you want to throw a fit, you need to sit in the no fit corner" and I pick them up and carry them to the corner (not cuddling them or comforting them or they will view that as attention which is what they are wanting...just carried quickly and determinedly ). Then I tell them (calmly) that when they are ready to talk to me in a big kid voice they can come out. Then I walk away. It is most effective if they know you are having fun in the other room while they are sitting there crying. Eventually you can work up to just telling them to go to the corner when they start crying and in our case they typically stop throwing a fit immediately.
Just like the other advice, don't give him what he "wants" when he throws a fit. For us, throwing a fit is a deal breaker--even if I was going to give it to them anyway...and I tell them so. Kids are much smarter than we give them credit for and they will keep trying things to see what works and what doesn't. He is noticing that it bothers you and its working. Don't let it work and he will stop it (and try something new...so be prepared :-D).
Oh and another thing that my kids like to say in a whiny voice, "but I don't want to..." My favorite response to that is, "I didn't ask what you wanted to do, I TOLD you we are going to do..." And that's that. I don't respond to further whines and I don't argue back--that is HARD. It is hard because you want to argue back--3 year olds can sound so logical sometimes! But he is three...remember that. You know what's best for him, not him. You need to constantly remember that you are the bigger person and back down--don't let him engage you. If it is time for a bath, and he throws a fit...let him cry. Don't argue with him about it. Just CALMLY say, "I didn't ask you what you wanted, I said it is time for a bath" and say no more. Pick him up and give him a bath. Eventually he will learn that it doesn't do him any good to throw a fit/cry--you're not going to argue with him and nothing will change. (and he'll try something else).
You can also try giving him a heads up before making changes..that might help. For example, tell him, after dinner we are going to take a bath. Or when we finish this game, we are going to clean up.
The trick of all of this is to remain CALM. Say everything as matter-of-fact as possible. If you get worked up, he'll get worked up. If you are calm, he will calm down.
Okay...hope some part of this helps.