90a6c035

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 0s 2s 2s 2s 0s
Eval 2s 2m04s 2m04s 2m07s 0s
Build 1m07s 9m57s - - 0s
Suite 0s 12m05s - - 11h49m57s