Make the force-push check optional and less stupid.

- Iterative instead of recursive
- Breadth-first instead of Depth-first
- Don't revisit nodes!