Improve qb validation

fixes some bugs in the tests, also fixes https://github.com/doctrine/phpcr-odm/issues/541

note ``Doctrine\Tests\ODM\PHPCR\Query\Builder\BuilderConverterPhpcrTest::testOrderBy`` is failing .. but honestly I don't really think such a test makes sense. It is way too complex to test as it requires so much mocking. IMHO we are better off testing this via the various existing functional test. So I vote for removing that test.

/cc @dantleech 

I don't like that we repeat this code - and it also should be repeated for walking constriants, and by extension we should do the same for all other places where there are invalid things. In short, we should handle this error once.

I would rather the exception were more expressive at the source:

````
You cannot use the nodename property in a dynamic operand
"where()->eq()->field('a.foobar')->literal('bar')->end()->orderBy()->asc()->field('a.nodename')`
````

For example.

But this would require us to boost the query builders self-awareness a little so that it is capable of producing such a trail. But I think that should be another issue. What do you think?

Otherwise I would be happy to remove the validation from the orderBy and only have it in the other method in if it is vague, the user should be able to relate the field name to their query and solve the problem.