subclassed some stuff underneath ProgramModel. mades some of its variables public for subclassing.

note: should probably consider defaulting variables to public