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!
So far, it's only one instance so any readability gain from reducing these intermediate field checks will be offse by having to cross-reference the checking module to find out what it does. I will merge it now but will keep this in mind and either find such a module or write a helper myself.