OK, here's what I do/would do. Doesn't mean it's right for you but just my opinion.
1. Reward positive things, so before he gets to headsmashing give him loads of positive attention. When he headbangs, move him to a soft area and don't talk to him until he stops.
2. Tough one. If DS hurts another child he is given a time-out on my lap, or we leave the place. He's not left on his own. But he can't play with the other children if he hits them - it does work, after two time-outs he stops hitting!
3. Tantrums. Are they "I want my own way" or "I'm frustrated"? When DS screams because he can't have a biscuit before dinnertime we just say "no, no biscuits before dinnertime, you'll be eating in fifteen minutes. Look, let's play with bricks, what's Daddy making for you - DADDY! MAKE A TOWER WHILE I COOK!" If DS is frustrated I tell him I'll "do words" for him. Then I'll say something like "DS likes the rabbit, the rabbit looks fun. DS wanted to stay outside playing with the rabbit. DS is upset Mama took him away from the rabbit. But it is time for breakfast now. DS was taken inside to eat breakfast and afterwards he can play with the rabbit again." He usually calms down once he knows I understand his upset and is quite happy to do what we need to do (ie eat, go shopping or change a nappy) once he knows he can have fun afterwards.
Bookmarks