ProgramShell concept

This brings us closer to #150

Notice how triangle example got simpler now, and also how `draw()` signature has shortened.