Refactored SourceProgramFactory and added toString method to the SourceProgramImpl class and associated test.
Modified SourceProgramFactory to use file.getName() instead of file.getCannonicalPath().  The path differs in the Jenkins build server, causing the toString test to fail when the full path of the source program is used.
Added framework for event generation, and observing events.