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.