This allows users to specify a top-down or bottom-up traversal of the IR, in addition to the already existing WalkOrder.
Certain transformations work better with a forward traversal. E.g., when cloning a piece of IR, operations should be cloned top-down so that all uses are defined when creating an op.
Certain transformations work better with a reverse traversal. E.g., when erasing a piece of IR, operations should be erased bottom-up to avoid erasing operations that still have users.
Why not just name them "ForwardIterator" and "ReverseIterator" instead of TopDown/BottomUp (which aren't correct, given the hierarchal structure of the IR).