We assume the sequence of expressions is in a valid order
(all items available before use). This function partitions the expressions
into ordered longest "no new value used blocks" by greedily scanning forward
remaining expressions in order taking any that: have all their values available from earlier groups,
do not use a value formed in the current group, and do not overwrite a value formed in the current group.
For an example please see http://winvector.github.io/FluidData/partition_mutate.html.

partition_mutate_qt(...)

## Arguments

... |
mutate expressions with := used for assignment. |

## Value

ordered list of mutate_se assignment blocks

## Details

Note: unlike `mutate_nse`

`partition_mutate_qt`

does not perform
substitutions.

## Examples

plan <- partition_mutate_qt(a1 := 1, b1 := a1, a2 := 2, b2 := a1 + a2)
print(plan)

#> $group00001
#> a1 a2
#> "1" "2"
#>
#> $group00002
#> b1 b2
#> "a1" "a1 + a2"
#>

#> x a1 a2 b1 b2
#> 1 1 1 2 1 3