N-way merge first attempt

**DO NOT MERGE**

*This is an early preview with commented out lines, printlns, FIXMEs, bugs and whatnot.*

N-way merge and infrastructure for more complex fan-in operations. Currently following a strictly layered materialization that does not allow cycles. 
you might just add `assert(id != preferredId, "cycled all the way around")`