Resolving and exploiting the k-CFA paradox: illuminating functional vs. object-oriented program analysis