Fix that #exists? can produce invalid SQL: "SELECT DISTINCT DISTINCT"

The combination of a :uniq => true association and the #distinct call
in #construct_limited_ids_condition combine to create invalid SQL, because
we're explicitly selecting DISTINCT, and also sending #distinct on to AREL,
via the relation#uniq_value.
    
Rather than build a select distinct clause in #construct_limited_ids_condition,
I set #uniq_value to true and pass an array of select distinct columns into the
select statement. This requires introducing a #distinct_columns method to return the
select columns but not the statement itself.