Evolving the Architecture of a Multi-part Program in Genetic Programming Using Architecture-Altering Operations