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 
That'd allow NSAggregateExpressionType for things other than BETWEEN and IN.