Maybe we should just turn this class into a helper function:

return SumOfCosts([cost, scaling])

Seems like we're wasting effort maintaining both sets of functionality.

Also, ScaledCost is broken because it doesn't implement get_gradient by calling the inner cost's get_gradient.