LoadCurve becomes Curve

The class contains features common to several types of curve (including
the upcoming CostCurve). We should extend it to add domain-specific
features as needed.
Add CostStrategy

Splits calculation of producer cost into separate classes. A "Constant"
strategy behaves exactly as the Merit Order used to (with a single
unchanging marginal cost in every point).

  Producer.new(marginal_cost: 100.0, ...)

FromCurve allows you to provide a Producer with a :cost_curve attribute
(whose value should be a Curve instance) with a custom marginal cost for
each point.

  Producer.new(cost_curve: Curve.new(...), ...)

Finally, LinearCostFunction varies the marginal cost of the producer
according to how heavily it is used.

For example, to create a producer with a mean cost of 100, which may
vary by 2%; the marginal cost would therefore be 99 if the producer has
no load, or 101 if fully-loaded:

  Producer.new(cost_function: { mean: 100, spread: 0.02 })

Closes #109