I've got a child about the same age and about the same size, and I definitely understand the difficulty you're having.
First off, don't expect to have a 100% perfect solution. All children misbehave from time to time - it's how they find their limits, how they find out what is okay, and how they find their self identity. A child who never misbehaves would be a child I'd worry about more than one that misbehaved a few times. It's a matter of making sure they understand their limits, and making sure the significant misbehavior is infrequent.
Punishments significantly after the fact nearly never work. Punishments in general have limited utility, and the amount of time must be very short between the action and the punishment for it to do anything at all except confuse the child.
What's key here is helping your child understand his limits, understand why they're there, and understand how to properly act when confronted with a challenging situation.
First, try to understand why he took the action he did; that makes a huge difference as far as how you proceed. Did he spit the milk at the other child because he was offended at being spit at? Or did he spit the milk because he saw the other child doing something silly and wanted to copy? Or something else? How you address it with him depends on what he's thinking. Both actions are wrong, but the motivation drives why they're wrong.
Second, once you understand why he took the action, ask if he understands why the teacher/you/whomever was at hand when it happened didn't like the action. It's possible he already understands this, so it's best if you check. Don't push him here, though - the idea is not really to make him tell you - just to make sure you're not repeating something that's unnecessary.
Third, assuming he doesn't already understand why it was wrong, explain why. Not using words like "Your teacher told you not to", but the real, underlying why. You don't spit milk because it makes a mess of people, and if done aggressively can make them feel bad. You don't hit because it hurts people and makes them feel bad. Try to make sure he understands and empathizes with the other party - how would he feel if someone hit him?
Finally, and this probably should be the majority of the discussion, help him find alternate ways of dealing with the situation. If he hit someone because they hit him first, help him develop strategies for what to do when he's been hit. Tell the other person that he doesn't like being hit, and to please stop. If they don't stop, find a teacher. If they're actually hurting him, use minimal force to extract himself and find a teacher. (Usually, bigger kids don't have to take that step, and 'minimal' is important here.)
Helping him develop strategies for dealing with situations like this, and practicing them, is extremely important. It not only helps him deal with stressful situations in a more calm manner, but it also helps him develop strategies of his own if you work with him to develop these strategies (as opposed to just telling him what to do) and explain the reasons why he should do things.
As far as being the one in charge - again, fully sympathize with you there. My four-and-a-half year old does too, sometimes, and it's challenging for him to deal with authority. Here again, though, you can work with him to understand why he needs to respect those in authority - talk about what 'anarchy' is, what might happen if nobody respected the folks in charge, and how he can manage his relationship with authority figures to his own benefit.