Add criteria support for repositories
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+