• rule tree: Remove unsound transmute()

    RuleTreeDeclarationsIterator would yield &PropertyDeclaration
    with the lifetime of the rule tree, but the reference would only
    be valid as long as the iterator was holding the corresponding lock.
    
    The lock would be released when the iterator’s `.next()` method
    moves to the next rule tree node, or when  the iterator is dropped.
    
    Also change apply_declaration to not require a `Clone` iterator
    (since closures unfortunately don’t implement `Clone`).
    Instead have it take a callable that returns a fresh iterator.
    SimonSapin committed Nov 5, 2016