Implement dijkstra algorithm for finding shortest paths

closes #3

The current implementation is still not perfect.
The problem lies in the node structure and "priority queue" implementation.
In each iteration we need to search for the nodes by name which is currently implemented inefficient as linear search.
The "priority queue" is also very inefficient and can be improved.