The main point when implementing this is to make sure that methods with a
return type of "object" return something that can be fed to matching() and
all constraint-generating methods (like logicalAnd(), equals(), like(), ...).
This allows for code like
$query->matching($query->equals('foo', 'bar'))->setLimit(10)->execute();