It could still be done with pos/rot constraints. It's a bit of setup, and it's difficult to explain via text. If you need the flexibility to edit, it's probably the best way. I downloaded your example file and added an example of the pos/rot constraint method into it. The only tricky part has to do with the pipes progressively moving down. For that, I added a point helper to the end of the pipe, then constrain the following pipe to the point helper of the previous pipe. This is the only part where you'll have to change the constraints for each pipe, rather than simply clone and offset keys. The trick to the whole thing is proper alignment of the pipe pivot and each mover. Also, the mover's motion repeats via out of range key types.
I wish I had more time to explain it. Hopefully, the example file will help.
10690_00EVDuKYEgR4p0wx4La8.zip