You're almost there, you just have to reconsider the mechanics of animating relative to a game engine rather than Blender - there's a difference because Blender understands what the Scene data means and the way it's set up to make the character walk the line. Third-party game engines don't. To get a character to walk a path the way you want you have to fully animate it, i.e. the model has to be posed and keyframed the full distance and duration. In essence you're producing a unique sequence rather than looping a walk.
The way that should actually be done is to keep the root bone static, it should never move, the appearance of motion comes from the other bones moving in relation to the root, and away from it. If this isn't done the sequences gets mushed because the positional data of each keyframe is rooted at the origin and grid centre (0,0,0), that point, and manipulation from it, is what determines distance. So whilst the keyframes are thusly rooted, the Armature isn't, it's origin is moving with the mesh resulting in a collapsed sequence (gets squished like an accordion).
To correct this you need to unparent everything and then reassign an Armature modifier to the mesh, linked to the Armature. That's your basic structure. In the Action Editor when you animate, the "Control" bone should remain static, everything else being posed and keyframed appropriately relative to the sequence needed, in other words, you have to physically move the character incrementally along the guide and pose each step whilst doing so.
A couple of other observations.
When you create animated object you'll generally want to 'ground' them so the base of the feet sit on the on the horizontal plain. This is also where the mesh and armature origins are located (they are again, what determine the position of objects in game). Loading the little guy into a previewing tool it's buried up to the waist.
The mesh is collapsed when loaded because it doesn't have a properly formed 'default' pose - usually this is because the vertex weighting or pose data isn't corresponding properly to the mesh structure. The problem disappears once an md5anim file is loaded though.
Ideally you'll want to reduce the polycount of the mesh, 50k is super high so use a Decimate Modifier on it to reduce it to a reasonable level (anything under 2500 for the kind of simple structure you have there).
Hopefully all this make sense. If not ask away