AnnotatedLine has a tree structure, and things like the body of a lambda will be
a child of the lambda expression. For example,
[&]() { foo(a); };
will have an AnnotatedLine with a child:
[&]() {}; '- foo(a);
Currently, when the Cleaner class analyzes the affected lines, it does not
cleanup the lines' children nodes, which results in missed cleanup
opportunities, like the lambda body in the example above.
This revision extends the algorithm to visit children, thereby fixing the above problem.
Patch by Eric Li.
nit: (I realize this code was like this before, but,)
I find it more useful to have auto *Line instead of auto &Line (and similarly auto *Child instead of auto &Child at line 1028 below) as that makes it immediately clear that inside the body of the for loop we need to use -> to access members of the object.