Query comments

Hi there,

As @jmikola suggests me, this is are my comments/thoughts about this new library

In a query all the params are optional, why make all the params mandatory? How access to the stored values?

This is my version of the Query object as a pure value object, with setters/getter and extra helper function called `merge Query` useful to delay the query declaration.

```php
$query = new Query();
$query->setQuery(['age' => ['$gt' => 5]]);
$query->mergeCriteria(['gendre' => 'male']);
```

I have some extra question/suggestions:
- Maybe fluent?
```php
$query = new Query();
$query->setQuery(['foo' => 'bar'])->setLimit(5)->setSkip(10);
```

- Maybe defensive programming on setters? I know not is a good practice but  helps to avoid bug when passing unexpected values.

The cli have the same behaviour and is a bit annoying if you dont remember the correct definition and you call `db.foo.remove({}, {multiple:true})`

- Missing sort and hint params. Why?

- Why final classes? Maybe someone needs extend it. (global)

- Why accept arrays or object? (global)

Best regards