Fix clipping of rgb_from_vector()
- Clip saturation and luminance separately to make sure the result is clipped at the maximum possible saturation or luminance
- Ensure that the argument of np.arccos(...) is within the allowed range to avoid NaN
Previously, clipping by specifying vmax resulted in strange colors, likely from NaN and/or improper clipping.
TODO make sure the change doesn't affect the result if vmax is not set.