d6d2fccf

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

Self-weed: report unused configured roots, root-instances and root-modules

Weeder now reports configured `roots` patterns, `root-instances` entries
and `root-modules` patterns that match no identifiers, treating stale
configuration as a weed in its own right (issue #154).

A `roots` pattern is only considered unused when it matches no identifier
Weeder is aware of at all (`allDeclarations`), not merely no outputable
declaration -- so a root naming a real type or constructor is not flagged
just because `unused-types` happens to be disabled.

Only entries the user explicitly set are reported; defaults are left
alone, since flagging an unconfigured default as unused is not
actionable. When `type-class-roots` is set, `root-instances` is ignored
entirely and so is never reported.

To name the offending entry in the output, compiled patterns now carry
their source string (`CompiledRegex`), and `ConfigType` records whether
each root section was explicitly configured.

Adds a SelfWeeding integration test. No existing golden output changes.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 59s 3s 3s 1m02s 59s
Eval 7m07s 34s 18m51s 25m58s 6m04s
Build - - - - -
Suite 59s 38s 24m59s 25m58s 25m20s