Previously cyclic extrapolation of F-Curves has been implemented
as a modifier that alters the evaluation of the curve after its
handles are already determined. This sounds reasonable, but in
practice means that auto handles at the end points of the loop
are not aware of the loop and are placed horizontally as normal.
This causes a hiccup in the animation and the animator is forced
to always manually modify these handles for every curve.
In order to make auto handle placement aware of the loop it is
necessary to either add hacky interaction between the F-Curve
itself and its modifiers, or replace the simplest and most common
uses of the modifier with an option of the F-Curve itself.
This change adds two new modes for the existing F-Curve extrapolation
setting that implement looping without any restrictions on frame range.
The auto-handle placement code is made aware of them to achieve smooth
transition. The modifier is kept for backward compatibility and cases
when its advanced settings are necessary.
Since the new auto handle behavior is only applied to the new options,
this is fully backward compatible.