Check all and uncheck all are actions. As such, they should be represented the way actions are represented: as buttons.
I posted this as a comment in another answer, but I want to include it here to explain why using a checkbox is a bad idea:
The problem with using a "check all" checkbox is what does that represent? What happens when you uncheck the header checkbox? Does it uncheck all? What happens when you uncheck one of the items below? Does it uncheck the header checkbox? What happens when you check all items individually? Does it check the header checkbox? The checkbox does not convey the meaning properly for it to be a good solution.
Buttons (or links) that state what they do leave absolutely no room for confusion. There's nothing to think about, and isn't the point of our jobs to make it so the basic functions of a system can be done without thinking (so brain-power can be used for the actual function being performed)?