After trying to solve this problem by myself for almost my entire blender career, I stumbled across a solution. This is a no python approach.
The basic idea is to have an empty, offset from the player, and "slow parented" to the player that two specialized bones track toward. By animating a normal downward chopping motion, as well as the influence value of the track-to bone constraint, we can cause the player to chop across in his upper arc.
This comes at the expense of variation as the player can't chop up from a downward position or thrust.
For you basic setup, you will need to create three extra bones: one for each shoulder, and one that control those two so they don't point inward. You will also need to create a "plain axis" empty that the control bone tracks to.
Add a track to bone constraint on the control bone and set it's target as the empty, which will need a slight upward and forward offset (see figure 1). Parent it to the player and give it some slow parent value.
Animate your chopping motion; it should provide all the functionality you'll need. note: do not animate the shoulder bones as this might interfere with the essential tracking.
Also animate the influence of the track-to constraint, starting at 1, staying at 1 until shortly before the end, and then moving to 0.
Switch to the logic editor and add a mouse-click sensor, an AND controller, and a Action actuator, set to play mode and with the chopping/turning of the shoulders action.
Viola! looks a bit awkward, but hey, that's the cost of beheading people.
(edit) you will also need a run-armature actuator