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!
since `$eq` (and all subsequent rules) are _things_ instead of behaviors, it makes more sense to nest `describe`s here:

```js
describe('numbers', function() {
  /* ... */
  describe('$eq', function() {
    it('should find equal values', function() { /* ... */ });
    it('should not return anything if nothing is equal to the parameter', function() { /* ... */ })
```