Looking at this some more, the `toStr()` hashing approach will not work if the user passes in a function as the query. In that case the only way to compare queries would be the recursive comparison approach, which requires us to iterate over an array of all active queries.

It might not be as beneficial to check for identical queries in a Memory store as it would be in a JsonRest backend store. Maybe it makes more sense to simply construct and maintain a new master results array for each `materialize()` call regardless of whether or not a matching query already exists. That greatly simplifies the Memory implementation, but increases the memory footprint of the store and reduces the speed of `_notify()` as numerous identical queries are materialized. Personally I think the typical use-case of a Memory store will not find this problematic.