librender: Restructure the way the rasterizer interacts with shader

Added an intermediate object: filler that encapsulates state and
hides implementation from Rasterizer. PixelShader is now just a
pure virtual class that has a callback.

This will make it easier to support stencil buffers, since the
rasterizer doesn't make assumptions about shaders. It also
cleans a bunch of cruft out of client programs.