DATAJPA-403 - Improve predicate building by reusing existing joins if possible.

QueryUtils now checks already existing joins and reuses them when building expressions. Inspired by the pull request #41 by Alexandre Payment but polished and added integration test to make sure the joins really get reused.