Only trigger a frame build if scene properties have changed.
In many important use cases (e.g. video playback on youtube) the display list doesn't change very often. Typically, the only thing changing between frames are the natively decoded video texture surfaces. In these cases, we can save a significant amount of CPU usage and battery power by not building a frame at all. Previously, any call to set/update dynamic properties would trigger a frame rebuild. However, it's often the case that Gecko sends dynamic properties updates that are either empty or exactly the same as the previous frame. With this change, WR will compare the scene properties and only trigger a frame rebuild if they have actually changed. This is a partial step towards fixing #2917 - a couple of other changes are also needed to completely avoid a frame rebuiild in this use case.