Replace metadata joins with another query

Right now, we always join metadata and system_metadata when we query for
instances. This inflates the number of rows returned by a factor of ten
at a minimum, and over 30 in some situations. This patch avoids the
direct join of these tables in favor of a "manual join" which performs
additional queries to fill the needed data. Latency may be increased,
but with the gain of a potentially significant amount of reduction in
data transfer.

This also provides the ability for the queries which utilize it to
selectively decide whether either or both of these additional fills are
performed, paving the way for future high-level optimizations.

Related to bug 1164737

Change-Id: I0610fb16ccce2ee95c318589c8abcc30613a3fe9
Merge "Replace metadata joins with another query"
Merge remote-tracking branch 'm_src_repo/citrix-fixes' into build-temp