auto merge of #1644 : pcwalton/servo/style-sharing, r=larsbergstrom

This series of patches implements style struct sharing as found in existing browser engines, as well as a bunch of related important optimizations. With them, we are faster than Blink, WebKit, and Gecko on the rainbow page for style recalc in sequential mode by at least 15%. Parallel gains are mixed—the rainbow page turns out to be a degenerate sequential case for the LRU cache used to track candidates for style sharing and so there is no improvement. For cases in which the cache is not hit, such as `perf-rainbow-hard.html`, we are around 25% slower than Blink sequentially, but have very large parallel wins so that we are around 2x faster at style recalc. (Note that parallel flow tree construction will improve this further.)

This patch series also fixes, as near as I can tell, some bugs related to ordering of properties that other properties depend on in selector matching.

r? @larsbergstrom
feedback? @SimonSapin (for selector matching changes)
feedback? @bzbarsky (for style sharing heuristics)
Change Text, Comment and ProcessingInstructions parent name from element to characterdata

All other node's parent type names reflect the actual type of the parent. This change extends that convention to the indicated nodes.

closes #1594
auto merge of #1702 : quandrum/servo/element_to_characterdata, r=jdm

... to characterdata

All other node's parent type names reflect the actual type of the parent. This change extends that convention to the indicated nodes.

closes #1594
Simplify string construction in InterfaceObjectToString.
Use DOMString in a few more places in utils.rs.
Use DOMString instead of ~str in a few places.
Use eq() and eq_slice() less, and map_default() more.
Use push_str instead of operator + for efficiency.
Make some selector matching code a little more consistent.
auto merge of #1703 : Ms2ger/servo/strings-cleanup, r=jdm
Change <em> and <strong> to be HTMLElement (fixes #1704)
auto merge of #1705 : lpy/servo/issue1704, r=Ms2ger

see #1704
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: Eliminate the flow leaf set by intertwining flow construction
and intrinsic width calculation
layout: Construct flows in parallel, without a leaf set