shaders: auto-bind uniform blocks and samplers

Uniform blocks named "block[0-3]" are bound to bind points 0..3
Sampler uniforms named "sampler[0-3]" are bound to texture units 0..3