[WIP] Introduce QueryInfo
QueryInfo is a container for arrays that hold
tables/fields/conds/options/join_conds for building up database queries.
The main purpose of introducing a typed object is so that
phan-taint-check-plugin can properly detect and analyze these kinds of
query builders rather than hardcoding the function name of getQueryInfo,
which isn't always used.
Since it implements ArrayAccess, it should be fully backwards-compatible
except for is_array()/type checks.