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. 
a nitpick: the following is at least one order of magnitude faster
~~~scala
preferredId = id + 1
if (preferredId == inputCount) preferredId = 0
~~~