• style: Add/refactor types of custom_properties for Properties & Values.

    Add a new ExtraData enum. We carry it along with a custom property's
    specified value in order to compute it, if it ends up being registered
    as being able to contain URLs through Properties & Values. When the
    specified value comes from a declaration, we keep track of the
    associated UrlExtraData in the Specified variant. However, specified
    values will also (implemented by a later patch in this series) be able
    to come from animations: in that case we are able to carry along a copy
    of the computed value in the Precomputed variant, to save us from
    recomputation and also to save us from having to re-resolve the URL.
    
    Add a new BorrowedExtraData enum, which is used for
    BorrowedSpecifiedValues. We use BorrowedSpecifiedValues when resolving
    custom properties; in the case that we inherit an untyped custom
    property, we create one from its computed value, which is a token
    stream. In this case we don't have a UrlExtraData or (Properties &
    Values) ComputedValue to compute with, and in fact we don't want to
    perform any computation. The BorrowedExtraData enum thus has an
    additional InheritedUntyped variant for that case.
    
    Pull out the css, first_token_type, and last_token_type fields of
    SpecifiedValue, BorrowedSpecifiedValue, and ComputedValue into a
    TokenStream struct (ComptuedValue then becomes a type alias of
    TokenStream). We'll use the TokenStream to store computed token stream
    values for typed custom properties: it wouldn't make sense to use
    SpecifiedValue because we have no need of the additional information
    (and that would also lead to properties_and_values::ComputedValue
    containing a SpecifiedValue which contains an ExtraData which may
    contain a properties_and_values::ComputedValue, which the compiler does
    not like).
    
    The properties_and_values module is addded by a later patch in this
    series, so we omit the Precomputed variant for now.
    
    Part 5 of a series of patches to implement the CSS Properties & Values API.
    jyc committed Aug 23, 2017