[Savers] base structures for saving animation curve data

+ they’re receiving data that’s already mangled and prepared
+ they only know how to convert that data into something that Unity
likes
+ sample TSR (transform, scale, rotation) saver for some basic
operations
[Transform] getters for single position index
[Curves] making sure that at least one point is passed to interpolate

+ old test was failing for values of 0, now None is checked explicitly
[CurveSavers] more asserts with more comments
[TSRCurveWorker] manager for interpolation of position/scale/rotation

+ uses curves and curve savers to prepare data
+ can be fed the way old CurveCalc was
+ much more options - possible to assign different types of curves for
each parameter (like Instant for z and linear for everything else)
[AnimationClip] animating positions using new TSRCurveWorker

+ replaced old function with new, simpler and nicer implementation
[AnimationClip] animating scales using new TSRCurveWorker

+ tested on Pickups (which are using scales the most) - seems fine
+ scale parameters taken by element from transform
+ removing empty timeline assert for curve helper, seems to be fine
[AnimationClip] cleanup of unused code
[CurveWorker] more generic approach

+ Curve worker now takes a bit more parameters but is also able to
handle most, if not all, use cases
+ CurveParam holds basic information about elements such like param
name, curve type (as python class, not instance) and optional lambda
function that can modify each value returned from curveClass
+ CurveHelper all curve params to prepare basic data structures as well
as new saver class and type to prepare saver
+ notice that CurveWorker module is NOT importing any savers nor
curves. It’s just using it’s interfaces.
+ fixed animation clips for the new behaviour
+ fixed path generation for TSRSaver, now there will be no None in path
names
[CurveWorker] small cleanup

+ better name for the function that prepares dictionaries for helper
+ removed not-needed fetcher for curve by key
[CurveWorker] continuous timeline

+ it’s possible to specify timeline as continuous, timeKeys are then
generated between min and max time of the animation
+ added kahan_range for nice generation of float-step ranges
+ CurveWorker FPS variable defines how many elements there should be
[AnimationClip] adding new style rotation

! doesn’t work yet!

+ uses CurveWorker
[AnimationClip] rotation using CurveLinearAngle

+ was CurveLinear but it should be interpolated as angle so
CurveLinearAngle was used instead - didn’t help sadly

! still doesn’t work
[AnimationClip] cleanup

+ removed sprite animations
+ removed “finalKey” creation and handling
[AnimationClip] fixed rotation issues

+ ofc wrong function for quaternion there was, not sin(a)/2 but
sin(a/2) should be!
[Curves] adding functional modifier as parameter

+ each point added to curve can be modified by some value
+ each curve can decide whether to work on original or modifier value
+ e.g.: linear and linear angle are interpolating original values but
slopes are calculated for modified values
+ added that to animation clip and curve worker

! untested
[CurveWorker] skipping path that is None

+ this way elements of the root are not animated
[AnimationClip] removed unused comment

+ this solution was removed so comment was useless and outdated
[CurveSavers] saver for floating values

+ useful for active and for e.g colours
+ can use params with None as name, attribute then is without sub name
[AnimationClip] cleanup + active via new interface

+ removed some useless comments
+ active for game objects is done via CurveWorker interface, with
FloatSaver and None-named curve param