I sympathize with you. So often we feel that we have to find ways to stop the behavior, but sometimes those behaviors, especially in early childhood, are required for their development. I would suggest you do some research on development at this age and stage for YOUR peace of mind so you can stop blaming yourself for being a bad parent (which we ALL do to ourselves:-), and then take a deep breath and find ways to support your child through this stage and through his frustration. He is trying to assert his independence which is a GOOD thing, and there are so many skills he's trying to learn to join the big kid world he's just starting to aspire to...he will really need gentleness, patience from his closest people (you and Dad) as well as parents that are well-armed with good information about child development. Time-outs are absolutely worthless at this age...it will only make the behaviors worse. Remember that his behaviors are not about you, it's about him working this development stuff out. Finally and most importantly, remember what his intentions are. Even though it may feel like it, he is NOT trying to make you mad or crazy. He is trying to get a need met that he doesn't yet know how to do appropriately.
Take care, love that little stinker, praise his positive behaviors and rest in the knowledge that this too shall pass!!!