I know this is long - but I know what you're going through.
Regarding whining: They don't always understand what you're talking about until they hear it for themselves. So, when they start that horrible sounding voice, I speak to them the same way, exagerated. I tell them that's how they sound and I don't want to hear that type of voice. Then, I speak (lower tone for boys) as I want them to speak, exagerated so they get it. I do this until I know they get it. (which at 5 should just be once) Then, it's just a matter of not responding to them when they speak that way other than demanding no whining. When it is an utter meltdown or chaos (as I have 3), I resort to a few minutes of quiet time so that I can calm down. They are not allowed to make any noise with mouth or hands or whatever. No noise for so many minutes. You have to train them to do this with punishing them when they don't. It will only take a few times to show you mean it. Practice at home before trying it in public. They know, that after quiet time, they will be allowed to talk to me. By then, they have usually calmed down too and we can have a conversation. Use this technique wisely and not all the time. When you feel you are going to explode, just tell him that. Mom is getting angry and frustrated right now with your whining, or whatever. I need 10 minutes of quiet time and then we'll talk. Again, it only works when they know it is a rule and punishment will take place if they aren't perfectly quiet. You might just need him to not talk to you - since you're aren't dealing with fighting, etc.
In regards to getting things done and on time and not yelling: Girl, I've been there! Still am some times on bad days. But what has worked wonders for me is a timer. A timer works wonders! If they don't get it done by the time the timer goes off, they are disciplined somehow. And that needs to only happen once or twice and they get it! They will work harder and faster. Praise them when they finish early. Now, I usually only have to threaten to use it for getting ready. I also use it for chores, etc. I ask them to help pick up in the living room or in their bedroom for 15 minutes. I set the timer. They can stop when the timer goes off even if they haven't finished the task. But, if I catch them goofing off or fighting then a minute gets added to the timer each time. My yelling has minimized sooooo much because of it. You have to be willing to keep your word - let them stop when it is time and discipline when they go over time. Even when you don't want to. If you don't, it won't work. I still find myself getting ready to yell in the morning. Then I stop, take a deep breath, and tell them that I'm setting the timer for # minutes and if they don't have their shoes on by then (etc.) then they will get a spanking (or whatever is applicable).
If they throw a fit when told no, then there is no chance for conversation about it later and therefore I will not change my mind about it. But, if they accept no for an answer, they can always come to me about again later one time. If they don't, then I know they really didn't want it. If they do, we can talk about it reasonably. Also, if they don't overreact when told no, I highly praise them about it and tell them how much I appreciate it and that they are growing up so much and how much joy they bring me. It's not immediate, but I definitely see a difference each time they are told no.