He's testing you. Many people say that giving kids choices is the way to eliminate problems, and sometimes it is....but your situation just goes to show you that a kid is going to be a kid and test you no matter how you handle a situation. You give him a choice about water or milk for example. He chooses water. You give it to him and he throws a fit. Your response should be....no....you chose water. This is what you may have, next time, make sure you choose what you want before I get it for you, and that's it. That's the end of it. Do not let him throw a fit. Punish the behavior if you must....but he is trying to see what he can get away with. Can I get Mom to jump through hoops and get me something else.....if not....can I throw a fit, which could give me power in certain places...e.g. the grocery store. What will Mom put up with? Can I be disrespectful and make her jump through hoops or disobey her?
At other times, don't give him a choice at all. Do not ask....do you want to go to the store? Just say....get your shoes on, we're going to the store.....no bribes....no choices. You're preparing him for the real world, and yes it's nice to have choices, but that won't always be the case. Sometimes you have to just do things, even if you don't want to, and a bad attitude is unacceptable.
That's the way I've handled it with my kids, and other than the initial testing, I've never had another problem with that kind of behavior.