Graph clustering involves the task of partitioning nodes, so that the edge density is higher within partitions as opposed to across partitions. A natural, classic and popular statistical setting for evaluating solutions to this problem is the stochastic block model, also referred to as the planted partition model. In this paper we present a new algorithm- a convexified version of Maximum Likelihood- for graph clustering. We show that, in the classic stochastic block model setting, it outperforms all existing methods by polynomial factors. In fact, it is within logarithmic factors of known lower bounds for spectral methods, and there is evidence suggesting that no polynomial time algorithm would do significantly better. We then show that this guarantee carries over to a more general semi-random extension of the stochastic block model; our method can handle the settings of semi-random graphs, heterogeneous degree distributions, unequal cluster sizes, outlier nodes, planted k-cliques, planted coloring etc.