One more tip for making time-out effective.
If your son doesn't say OK to anything, take him to time-out. If you say NO, and he whines, he goes to time-out. If you tell him to do something, and he doesn't say, OK, he goes to time-out. If he hurts another person, he goes to time-out. He needs to get really used to going to time-out. The more he goes, the more he will recognize that time-out is the place to calm down and then talk, and that the sooner he does that the sooner life is good again.
He just needs lots of experience. Don't baby yourself, by tolerating way too much emotional garbage from him. Keep your tolerances low. We think that we don't want to deal with a behavior, because it seems like too much work, but in reality, it makes a lot more future work if we choose not to teach to a behavior when it comes up the first time.
My son had a problem whining all the time for a while, and I just started saying, "You are whining." and then walked him to time out if he didn't immediately fix the problem. Or I would say, "You didn't say OK", and walk him to time out. Just don't forget to practice the correct behavior after time-out is done, and follow through with any negative consequence earned. Your tolerances should be so low, that you actually could be perceived as strict. Firmness is a blessing for children. If you are firm, they know their boundaries so much better. And, people who know their boundaries are always more secure and self motivated. :) And, if your child goes to time-out every time they choose wrong, they learn cause and effect much better, as well as have more opportunities to practice clamming themselves down. If your child has to go to time-out to calm down EVERY time he gets emotional, then he WILL choose to learn how to make time-out work for him better, because no one likes to get emotional all the time; it takes too much energy!