454883f3

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Rebuild centjes-chart: pure report IR, diagrams backend, tests

Restructure the centjes-chart package around a backend-agnostic, pure
report so the data pipeline is total and testable and rendering is isolated:

- Centjes.Chart.Report: ChartReport/ChartSeries IR plus a typed ChartError
  (unknown currency / no data / conversion failure) with a ToReport instance
  that delegates to ConvertError. produceChartReport is total; the old
  fromJust/minimum/maximum partials are gone. sampleStepFunction does the
  step-function carry-forward and is property-tested.
- Centjes.Chart.Render: the only place precise money becomes Double; renders a
  stacked-area SVG via Chart + Chart-diagrams (drops the cairo C dependency).
- Command/All + OptParse: currency, account filter (reusing Centjes.Filter),
  output path and title are now settings instead of hardcoded.
- Add centjes-chart-test: sampleStepFunction properties, a valid golden, and
  error goldens for every ChartError constructor.
- Re-value held balances at each day's rate; share the per-day price graph.
- Fix copy-pasted switzerland option config; ensureDir on the output path.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 1s 2s 2s 4s 1s
Eval 4s 53s 53s 57s 0s
Build 22s 3m11s 1m35s 1m58s 0s
Suite 1s 4m08s 1m57s 1m58s 1s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s