I feel for you OP. My son is also very 'spirited' and I learnt from when he was 8mo that join in type classes weren't his thing (he'd get frustrated and crawl over to the plug sockets/radiator/stairs etc). We would go to just regular playgroup and he enjoyed that much more.
Hes almost 3 now and he has taken a lot of parenting. He is much harder work than my neice for example who will focus on a toy for a good 25 mins before moving on to another. She also will sit an draw, something my son is only just showing a slight interest in.
As he's gotten older, and I've had another baby who is very different to him (read:easier!), I've realised that actually children, even as infants, are all so different to each other and actually some kids are just naturally easier to look after. My son, if left unkempt, would be a total bruiser. He is explosive, instinctive, impatient, loud, likes to throw and jump and run. We have had to work really hard to shape these traits in to a child that can cooperate with other kids, and the work isn't over! He is also incredibly loving, has an amazing imagination, he is very funny, super strong and physical, brave, oberservant, verbose, the list goes on.
Its so easy as a parent to attribute your children's good qualities as a reflection of your superior parenting skills, and definitely parenting comes in to it, but a lot of the time its just the way a child is and its your job to gently shape that in to something more socially acceptable.
For example my other neice eats everything and anything which my SIL attributes it to her good parenting, that she has always given neice a wide range of foods from early on, they eat the same food together at the table, she doesn't give her lots of snacks, praises her daughter for eating healthily and so on. Well we did all of this with my son too. He used to eat everything but now basically survives on toast. We did all the same things (and continue to try!) but it is my sons decision to nit eat these things, not my bad parenting.
I guess this is a long way of saying that you are obviously doing a great job with your son and the very fact you're reaching out means that you are a good parent. Some kids just are harder work.
Some useful reading: how to talk to little kids so they'll listen and the explosive child.
Keep at it OP. My tiny tearaway is a total gem now at nearly 3 but I had many many moments of crying and pulling my hair out. I'm sure my work isn't over and he'll go through another difficult phase too but believe me that its not your fault!