That's easily possible with drivers:
My scene is a former cube with an Array Modifier for the treads and a Curve Modifier on top of it.
The Empty and the treads are parented to the curve. If I move the treads in x, they go around the curve. The treads have a single purple driver added by right clicking the x location.
That driver shows up in the Graph Editor >> Drivers >> N >> Drivers if the treads are selected. Pretty deeply hidden actually.
I created a variable called gumball. Of course you can pick a more confusing name if you like. The object is the Empty, the value we borrow is the Z-rotation in my case. Test which axis will do the trick for you. I use local space and have everything parented to the curve, so I can rotate the rig without distorting anything.
If you get a little warning sign, you might need to enable python in the file tab of the User Preferences.
In the Expr. field above, just use the name from the variable and stuff should move around when you rotate the Empty.
If you want to synchronize it:
-gumball switches direction
The multiplier changes speed. My curve has a diameter of 2.849 * pi resulting in a circumference of 8.95 Blender Units.
One rotation of the Empty in radians is 2 * pi = 6.283
8.950 / 6.283 means I have to multiply with 1.4245 in order for the rotation to match.
If you have a different curve (my circle is just laziness), just pick the diameter that suits you. Either one of the wheels or the height of the curve.