Even though `createRenderState` does a cache lookup.  It is still expensive since it needs to generate the key and search.  These calls to `createRenderState` actually show up on the profiler:

![image](https://f.cloud.github.com/assets/782098/491504/08d2e80c-ba32-11e2-8063-1c55b1de35b2.png)

Render states are not really meant to be dynamic like what we are doing with the scissor test below.  However, that is a common use case that is going to become more important as we do more post-processing/deferred stuff.  I think we can treat the scissor test as a special case so we can keep the render state optimizations we already have and still serve this case.  Let's discuss.