Start using more typed units in the compositor

Now that rust-layers is starting to support typed units, we can use
them more thoroughly in the compositor. This is a step toward removing
as many untyped units as possible.
Merge pull request #3173 from mrobinson/typed-units-1

Start using more typed units in the compositor
Store Compositor ReadyState per-pipeline

Instead of storing a single ReadyState, store one per pipeline and
track the earliest one.
Store one RenderState per-pipeline in the Compositor

This can later be used to decide whether the entire pipeline is ready
for rendering.
Create root compositor layers for all frames eagerly

Instead of waiting to create the root layer, create them as soon as the
Compositor receives the frame tree. This allows the compositor to
create a layer tree skeleton of which to hang the base layers when they
are ready.
Remove SetLayerClipRect and add SetLayerOrigin

The constallation has accurate information about iframe layer origins,
but not their size.
Don't produce image output until all pipelines rendered something

Instead of producing image output as soon as the first pipeline is
ready, we wait to produce the output until all pipelines are in the
idle RenderState. This should remove a race condition when running
reference tests.
Update and expand iframe tests

Add iframe tests to their own subdirectory and add another test case
that used to trigger a fatal error. The new test case uses the
"allow-scripts" sandbox attribute to work around a script task failure
caused by the child frame sharing the same script task as the parent.