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!
These functions capture values from their closures. I guess moving them out is possible but it will end up more complex and less readable. As this is not a production library that's intended to scale to handle millions of records, I think keeping it simple is preferrble.