Missed optimizations

- freezing constant string to ensure it's not mutated
- use constant where available
- optimize `respond_to?` to not allocate array.

Discussed in #737 and #739

`respond_to?` takes two arguments all recent rubies:

- http://ruby-doc.org/core-2.1.3/Object.html#method-i-respond_to-3F
- http://ruby-doc.org/core-1.9.3/Object.html#method-i-respond_to-3F
- http://ruby-doc.org/core-1.8.7/Object.html#method-i-respond_to-3F

Also `method_missing` will return a symbol from the first argument, we don't need to allocate a string:

- http://ruby-doc.org/core-2.1.3/BasicObject.html#method-i-method_missing
- http://ruby-doc.org/core-1.9.3/BasicObject.html#method-i-method_missing
- http://ruby-doc.org/core-1.8.7/Kernel.html#method-i-method_missing

cc/ @raggi 
> TO_ARY = 'to_ary'.freeze

Try this, in a case statement with and without. Ruby does this optimization for you, so it will actually be slower to use a constant. Read this thread https://groups.google.com/forum/#!topic/rack-devel/SKAE_yqN8-0

> if method_name.to_s == 'to_ary'

This is slow, the reason is because of the `to_s` will allocate another string. The point of this PR in the first place was to get rid of that `to_s`

I appreciate you looking at this PR. Performance PRs take an extra long amount of time to put together due to all the benchmark running for proof. If you're suggesting a change for a performance reason, (even if it's to someone else's PR) please go the extra mile and benchmark your suggestion first. Here's all my benchmarks https://github.com/schneems/derailed_benchmarks this is at the application level. Most changes such as the one you suggested can be proved or disproved my making your own benchmark scripts in around 20 lines or less using benchmark/ips. Something to this: https://github.com/rails/rails/pull/17250 .