Given the equations found in the answer here:
How would one A) Apply this to a 3D Catmull-Rom Spline, and B) write A out programmatically (for the math illiterate)?
There are a few ways to move along at a constant speed along a path whose "segments" are not a constant length - and it's not trivial to make them that way.
I would approach the problem by making a "Mover" of sorts which follows a "Path".
(sorry if you haven't learned about generics/templating, just replace T with Vector3)
Most "path" implementations like Catmull-Rom spline can give you a point given a delta value that ranges from 0 to 1. Based off of this the Mover moves along the path looking "lookaheadDelta" ahead and moving towards that point. The smaller this value the smoother the movement, but if it's too small you might make to many path calculations per update.
The update method is important, it tries to move speed*dt units along the path. If the distance between lookahead and the current position is less than this value than you need to iteratively calculate the new lookahead based on the lookaheadDelta and continually move towards it.
It would look something like this:
And don't forget about initializing it!
Don't forget to add in logic to check when delta >= 1.0 which means you're at the end!
You could even calculate lookaheadDelta based on the estimated length of the spline and the units of your game. I would guess 100 data points would be enough making 0.01 a good value for lookaheadDelta.
You could also cache "direction" and "room" after each lookahead calculation.