The Practical Dev's review of Graph Partitioning and its Applications