Implemented all optimizations from the CHARM data mining paper.

Now the algorithm is much more scalable. It is as efficient as it can get for a general data mining problem. Further optimization, if needed, could be achieved using the context of the problem, for which we apply data mining (e.g., by fitering out some frequent but not interesting AST node operations).