Finally got round to creating a Camera Animation component.
Everything is easy except for achieving constant velocity, my solution is to scale the delta time by the rate of change of the curve:
S = float3(sx, sy, sz) // and sx etc. refer to the slope of the cubic curve for that axis DeltaTime = TimeFactor / Length(S);
For orientation constant velocity is irrelevant, but smooth velocity changes are important, so:
Quaternion.Slerp(q1, q2, SmoothStep(ip))