Extract some duplicated query building logic and add support for multi-level link queries

Eliminates the duplicated handling for IN clauses as well as a few other bits, and in the process got multi-level links close enough to working that I just went ahead and finished it.

@alazier @jpsim 
In this function I would prefer if/else instead of returning mid-method.