remove unnecessary array allocations
only pop records when we get an array
remove should_pop variable
add a test for the parameters sent to the url helper for new records
only send options if there are any options
only test `persisted?` on the record once

also avoid the case of calling `persisted?` on something that doesn't
respond to it
remove dead code
break each polymorphic type to it's own method
fix url_for with classes
adding a method to handle strings using the same api
push model and class handling to a helper builder object
push string handling to the builder object
push list handling to the builder object
remove suffix from the handler methods
undo optimized calls until the builder object is finished
probably should not check in a raise
use the helper method builder to construct helper methods
this class is a model, so it should act like one
:cry::gun: use an empty hash for magical speed.

For some reason, if the hash is empty, we choose "optimized" routes.  I
am not sure how or why optimized routes differ from regular routes.
But, if we make sure the hash is empty, we get a nice speed improvement.
Revert "reduce conditionals in url_for"

This reverts commit 9df60693d77813b362fb528fc62381ac8f1eec12.