ProgramShell concept

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

How about:

~~~
cx.span_err(span, "Unable to implement `ShaderParam::bind` on a non-structure");
~~~