Fixed `columns_for_distinct` of postgresql adapter
Speed-up TimeWithZone to String conversion

I've noticed that `String(model.created_at)` is performing poorly in comparision
with other fields. The source of the problem is a way `Kernel#String` works: it first
tries to call `to_str` (which causes `NoMethodError` in `method_missing`) and then calls `to_s`.

Performance tests:

    tz = Time.zone.now

    Benchmark.ips do |x|
      x.report { String(tz) }
    end

Without this code:

    Calculating -------------------------------------
                               572 i/100ms
    -------------------------------------------------
                            10177.7 (±18.2%) i/s -      48620 in   5.000325s

With this code:

    Calculating -------------------------------------
                              1518 i/100ms
    -------------------------------------------------
                           138984.2 (±10.1%) i/s -     677028 in   4.974897s
add a test for existing mapper functionality

I'm not sure if this is actually used, but I'm adding a test to define
the behavior
set defaults at the top so we can avoid the ||= test
extract controller checks to methods
reduce blank? checks
reduce action.blank? calls
fewer blank? calls
invert logic to remove nil? and exclude? checks (use ruby rather than AS when possible
trade 2 is_a? checks for a nil check
return early if we have a valid controller name
swtich to returning early if to responds to call
we don't need the call to presence. that is my present, to you!
extract controller and action parsing to a method
only do one nil check against the controller
change to case / when on types
only one nil check on the action variable
translate action / controller to the desired object
move nil check to a method that yields to a block if the value is not nil
add a test for controllers without colons