Graph: Use Semi-NCA algorithm in compute_immediate_dominators (#77)
Graph: Use Semi-NCA algorithm in compute_immediate_dominators (#77)

* Graph: Add method to compute Depth First Search Tree

* Graph: Add method to compute the pre-order of all vertices

* Graph: Use Semi-NCA algorithm in compute_immediate_dominators

The Semi-NCA algorithm is described in:
Linear-Time Algorithms for Dominators and Related Problems
https://www.cs.princeton.edu/research/techreps/TR-737-05
falconre/falcon,endeav0r/falcon,falconre/falcon,falconre/falcon,endeav0r/falcon,endeav0r/falcon,endeav0r/falcon