Extracts some methods in ActiveRecord::Query so they can be overridden in sub-classes.

* #tuples now delegates to #evaluate_tuples(relation)
* #columns_hash is used to access the columns of the relation since sub-classes may
  want to override this to return columns from multiple relations (e.g. when the
  relation is a join)
* #type_cast(column_name, column_value) is now used to cast values to their ruby-side
  representation to allow sub-classes to handle special columns themselves. The
  default implementation uses the columns returned from #columns_hash.