• style: Update cascade to take account of typed custom properties.

    We have to do some additional work to compute typed custom properties
    and to handle cyclical declarations involving font-size.
    
    (Unfortunately there doesn't seem to be a really good way to split this
    patch up without spending a ton of effort, and I don't think it'd make
    the patch more clear. Sorry!)
    
    Make custom_properties::OrderedMap::remove public, so that we can remove
    cyclical custom property declarations from properties. We also need to
    insert the initial value (possibly typed) if necessary and detect if
    font size is cyclical and remove it in that case, so it makes sense to
    handle them in the same place instead of custom_properties mutating
    things behind the scenes and making it worry about typed custom
    properties.
    
    custom_properties::cascade takes two function arguments,
    inherited_computed and handle_keyword. This allows us to maintain
    separation of concerns wrt typed custom property registrations (also
    makes it clearer who is getting data from where).
    
    custom_properties::substitute_all and custom_properties::substitute_one
    gains function arguments compute handle_invalid with the same
    justification.
    
    custom_properties::finish_cascade is replaced by
    custom_properties::compute_ordering, which computes whether or not
    font-size's declaration is cycles, the custom properties to compute before
    early properties (including those upon which early properties depend),
    and the set of properties that are cyclical.
    
    Fix the comment on substitute, which does not type.
    
    Have Gecko's ComputedValuesInner::get_custom_properties return a
    properties_and_values::CustomPropertiesMap instead of a
    custom_properties::CustomPropertiesMap. This stores typed computed
    values as well.
    
    Replace Servo's Stylist::custom_properties with
    get_custom_properties, which returns a reference instead of an Arc,
    because it doesn't make sense to clone the Arc when we never need it as
    one. Also add get_parent_custom_properties, so a later patch in the
    series can inherit typed custom property values.
    
    Note that this also requires a change to ServoBindings.toml to account
    for replacing custom_properties::CustomPropertiesMap with
    properties_and_values::CustomPropertiesMap.
    
    Part 11 of a series of patches to implement the CSS Properties & Values API.
    jyc committed Aug 23, 2017