Orchestrates a query against the database. Queries must use
Database\Statement objects to store the query and build it.
This method works with the cache.

Should automatically handle different connections for read/write
queries if needed.

@param string  $sql
@param mixed   ...$binds
@param boolean $setEscapeFlags
@param string  $queryClass

@return BaseResult|Query|false