Restructure compositor layers to work with iframes.

When a frame is selected via set_ids, a tree of root compositor layers is
also created, matching the tree of pipelines in the frame. This
decouples the chronological ordering dependency for parent frames and child iframes when they
send CreateOrUpdateRootLayer & CreateOrUpdateDescendentLayer
messages.

Gotchas:
* iframes dont render when using the -o option (the compositor doesnt
  wait for the child iframe to render before exiting).
* layout task or script task failure on exit ("task * failed at sending on a
  closed channel"), this happens if the child iframe
  shares the same script task as the parent and can be avoided by adding
  the sandbox attribute to the iframe.

@pcwalton & @mrobinson
I was confused about what to do in this sort of situation myself, but I think our style for doing this sort of thing is to break it up into multiple `use` lines like you see in an example below with `servo_msg::constellation_msg`.