Make filter_binds filter out symbols that are equal to strings

ActiveRecord::Relation::Merger's filter_binds method does not filter out bind
variables when one of the attribute nodes has a string name, but the other has
a symbol name, even when those names are actually equal.

This can result in there being more bind variables than placeholders in the
generated SQL.  This is particularly an issue for PostgreSQL, where this is
treated as an error.

This patch changes the filter_binds method to make it convert both attribute
names to strings before comparing.
make the module version quack the same as the instance

this way we can stop checking respond_to on every call.
extract route key translation to a method and reuse it
reduce conditionals in url_for
typo: resulution -> resolution [ci skip]
add a test for passing two models to the polymorphic_url method
add a test with three objects
always pass a list to build_named_route_call
remove extract_record since we have extracted the list
stop popping in build_named_route_call
record as a hash is not possible, so rm branch
we always convert this variable to a list, so we can remove the unconversion
only do the Array is_a check once
skip another Array is_a check
pull nil checks up
push all is_a tests up, always pass options to the named route
pulling helpermethods up before refactoring
small refactoring
simplified route method name generation
remove unnecessary array allocations