Specialize branched loops

Continuation of PR #469 inside the main repo.
Because this recurses into let values, I think this should be an IRGraphVisitor so that it doesn't risk going combinatorial.

In this case, you say include(scope.get(op->name))  instead of scope.get(op->name).accept(this);