Parallelize fragments in the order of data flow from leaf fragment(s) to root fragment

* Currently we parallelize each fragment in random order independent of fragments that send data and receive data. This causes issues when the fragment has no affinity of its own (such as scan). Ideally it is good to have affinity of a fragment to nodes which are running the fragments that send data to this fragment.