JoinBuilder is used to keep track of joins automagically for complex searches.
It accomplishes this by building a simple tree of parents and children and then recursively drilling into the tree to produce a useable join attribute for search.