Evolving Modular Programs By Extracting Reusable Functions Using Significance Testing