refactor(xlsx): keep writeWithGantt's public signature stable
The SheetSpec work had grown writeWithGantt a 4th optional parameter,
leaking composition plumbing into a pre-existing public method. The
shared body moves to a private composeGanttWorkbook that both
writeWithGantt and writeWithGanttAndSheets delegate to, and the
buffer-wrapping repeated across write/writeSheets/the empty-gantt path
collapses into one toBuffer helper.