Hi Molly,
Girl, I'm right there with you! My 2.5 year old is a holy terror. On the bright side, your son has opinions, and that's never a bad thing!
With regard to tantrums, it's normal. Unpleasant, yes, but normal. It always surprises me, the things my youngest will choose to have a fit over. The other day, she absolutely lost it because I put her pink sweater on her instead of her green sweater. And it was a knock-down, drag-out tantrum that went on for probably 20 minutes. (Keep in mind that when she started throwing the tantrum, I told her she could wear the green sweater if she wanted, but by then it was TOO LATE!)
The only thing I have found that helps is, I give her space to work out her frustration. I put her in her room and tell her, "I'll just let you sit in your little chair with your teddy bear until you're done crying. You can come out when you're feeling better." I think they throw fits because they don't know how to verbalize their feelings very well. So a day of little frustrations all comes to a head when you put the pink sweater on them instead of the green sweater... and it's the straw that broke the camel's back, and it all just comes pouring out of them. And then when you try to make it better, it's like adding insult to injury, as if you're implying that they can't make it better by themselves. (But sometimes they want you to comfort them, after all...)
Sigh... so I guess the good news is, this too shall pass. My 5.5 year old doesn't do this anymore, and hasn't for at least 2 years now, thank goodness. Just try to weather the storm as best you can. Some kids are just a lot more passionate about life than others! Only fight the battles you absolutely have to with your toddler (baby proof the heck out of your house so he can't get himself into trouble very often, so you do not find yourself having to correct him a lot). Just let the rest go for now, until he has passed through this phase. Enjoy him when he's in a good mood. =) Hang in there!