ddc-core-flow: Process code generation, split out counters

I've split out counters from the guard# and segment# primitives, as
you can have multiple fills in the same guard that require different
counters.
for example,
    let as = filter p xs
        bs = map    f as
        cs = map    g as

        inits = map h as

    join (fill out1 (inits ++ bs))
         (fill out2 ([]    ++ cs))
here, the fills for the right-hand of the append are in the same guard
context, but have different counters:
    out1 should start at (length inits), out2 at 0.