feat: add write_blif_body to emit gates without a file header
Splits the gate emission out of write_blif so the diagrams of several unique
tables can be written into a single blif module, with the caller owning the
.model, .inputs, .outputs, the $true/$false constants and the .end.
This is what a partitioned conversion needs: each block of a partition is
built in its own table, and every table numbers its nodes from 2 again, so
the internal wire names of two blocks would collide in a shared module. The
new wire_prefix parameter is prepended to every internal wire name and keeps
them apart.
Both existing write_blif overloads are re-expressed in terms of the new
method, so a single table module is emitted exactly as before - verified
byte-identical on add8, mul4, par12 and c17.
Also takes signal_map by const reference in write_blif_recursive_muxxor
rather than by value; it was being copied on every recursive call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nXGcHc3GSLAqg1AL53LKM