Program Demultiplexing: Data-flow based Speculative Parallelization of Methods in Sequential Programs