A 16th birthday in a small US town has turned to tragedy, with a gunman killing four people and injuring 28 others.