layout: Run assign-widths in parallel.

5% layout speedup on mobile Wikipedia.
layout: Combine assign-widths and assign-heights traversals.

15% layout speedup on mobile Wikipedia.
layout: Make `ParallelPreorderFlowTraversal` more generic
layout: Construct flows in parallel, without a leaf set
layout: Create a font context in sequential mode
auto merge of #1700 : pcwalton/servo/deleafset, r=kmcallister

cc @pradeep90 — This removes leaf sets and should be enough to get you started.

This series of patches combines various layout passes to eliminate the overhead involved with bottom-up passes. It also makes assign-widths and flow construction run in parallel. No raw layout code was touched (except in trivial ways); rather this just changes the way methods are invoked. So the overall level of code cleanliness should remain the same. In fact, this is a (slight) net loss in LOC, and should be an improvement in safety due to not having to ensure that the nodes in the leaf sets stay alive!

This was quite a nice speedup; we're now 38% faster than Blink sequentially for style recalc on the rainbow page and 2.56x faster with 4 cores. (The relatively low speedup is because the LRU cache hits perfectly on that page sequentially.)

There is a data race somewhere in the unsafe code I added, so *do not merge yet*.