implement concatenation for QueryRules

 - to get access to an iterator, we need the rules to be PersistentVector, rather than IPersistentVector
 - the transient vector needs to be upcast to get the visibility to the conj and persistent methods, which then requires a corresponding down cast