Improves document filtering for query and update/remove operations.

This implements record filtering that is closer to match the original MongoDB algorithm. The new code is non-trivial, so I would like more eyes on it.
@rodaine @parkr can you please take a look? Please also feel free to suggest/add any other people who could help with the review.

Note, the the old code is completely replaced by the new implementation and the tests are overhauled, too. Thus, for `lib/filter.js` and `test/testFilterItems.js` it makes sense to look at just the new version rather than at the diff. Thanks!
Do these 2 functions have to be recreated every time this function is called? Can they be created once and reused instead?