Refactor QueryExpressionVisitor and Criteria API integration

Moved Criteria\QueryBuilderExpressionVisitor to Query\QueryExpressionVisitor and restructured the internal code to more closely resemble ORM's implementation.

Use SPL's RuntimeException instead of a custom class. Rewrote the test cases to cover the walk methods directly instead of dispatch(). Added tests for unsupported operators and composites.
Avoid unnecessary sort/limit/skip in DocumentRepository::matching()
Support Comparison::CONTAINS in doctrine/collections 1.1+