Now when we hit alt-a the dummys should follow the holder empty's location and rotation and look just like a train. We need to alt-p(unparent)the holder emptys from the path and make the curve deform track and any dupliframes real (see wiki) then delete the original curve path.Take note of the names of the ipo blocks attached to our dummys and attach them to our corresponding holder emptys then delete the dummys.
Now going back to our steam empty we added a float prop called loc we are going to control this using a python script. I won't go into the details here but basically the more power the faster the loc value changes the faster the train and because we are copying this loc prop to our wheels, loco and cars everything will follow.

So after all this do we have a train? Try It, Hit P and see how you go.I had a funny thing where the train was too spaced out Man but when playing it all came good(I think this was because the current version started in 2.37 and ended with 2.41.
The 400 number in line 79 is arbitry and you may need to adjust this depending on your scale. I think 100 frames is approx. 5 blender grids in my game
If you are having wheel slip effects the rotational speed of the wheels is adjusted by the angle of the ipo curve atttached to it. I inserted rot keys only and endlessly extrapolated them to run forever.Of course if you just ipo animate something along a route you can still use this script to run it without the path complexity but you will miss out on the smooth curves
The train game is almost finished and it will be posted here if you all want a closer look. My email address is davesimpson66"at"bentstraight.org. Any body who wants to contribute scenery or textures for title credit are more than welcome as I am no texture artist though I did the loco paint job myself.