Changed Query.combine() to use JoinPromoter

Also, added a lot of comments about why join promotion is done the way
it is.