Bug 1073036. layers: Track program state more carefully to avoid setting unnecessarily. r=nical

This introduces some infrastructure to start tracking the program state more carefully. Currently
it only tracks the program because UseProgram was showing up the most in profiles, but more
state could also be added as needed.

--HG--
extra : rebase_source : 289ab867ef63032f7604a6cbe6d0230fd0a9411a