Updated scopes to properly deep merge queries

This ensures multiple chained scopes use a "deep merge" approach when combining queries, rather than the somewhat crude `dict.update` approach used previously. 

This ensures that more complex queries such as those involving `$elemMatch` or `$in` can be combined such that the nested criteria are combined rather than clobbered.