Prevent extra string allocations when no 'rel' arg passed
Prevent extra string allocations when no 'rel' arg passed

Do a check if the 'rel' argument is passed in, and simply set it to
'nofollow' if 'rel' was not passed in. This prevents three string
allocations for each call to `link_to` in that scenario. In the scenario
where the 'rel' argument is passed in, performance is around the same as
before as the `key?` check is very fast.

```ruby
begin
  require "bundler/inline"
rescue LoadError => e
  $stderr.puts "Bundler version 1.10 or later is required. Please update
                your Bundler"
  raise e
end

gemfile(true) do
  source "https://rubygems.org"

  gem "benchmark-ips"
  gem "rails"
end

def allocate_count
  GC.disable
  before = ObjectSpace.count_objects
  yield
  after = ObjectSpace.count_objects
  after.each { |k,v| after[k] = v - before[k] }
  after[:T_HASH] -= 1 # probe effect - we created the before hash.
  GC.enable
  result = after.reject { |k,v| v == 0 }
  GC.start
  result
end

@hash = {}

def master_version
  "#{@hash['rel'.freeze]} nofollow".lstrip
end

def fast_version
  if @hash.key?('rel'.freeze)
    "#{@hash["rel"]} nofollow".lstrip
  else
    "nofollow".freeze
  end
end

puts 'no rel key'

puts "master_version"
puts allocate_count { 1000.times { master_version } }
puts "fast_version"
puts allocate_count { 1000.times { fast_version } }

Benchmark.ips do |x|
  x.report("master_version") { master_version }
  x.report("fast_version")     { fast_version }
  x.compare!
end

puts 'rel key'

@hash['rel'] = 'hi'.freeze

puts "master_version"
puts allocate_count { 1000.times { master_version } }
puts "fast_version"
puts allocate_count { 1000.times { fast_version } }

Benchmark.ips do |x|
  x.report("master_version") { master_version }
  x.report("fast_version")     { fast_version }
  x.compare!
end
```

```
no rel key
master_version
{:FREE=>-2791, :T_STRING=>3052}
fast_version
{:FREE=>-1}
Warming up --------------------------------------
      master_version    80.324k i/100ms
        fast_version   200.262k i/100ms
Calculating -------------------------------------
      master_version      2.049M (±11.9%) i/s -     10.121M in   5.025613s
        fast_version      6.645M (±21.3%) i/s -     29.439M in   5.007488s

Comparison:
        fast_version:  6644506.3 i/s
      master_version:  2048833.0 i/s - 3.24x  slower

rel key
master_version
{:FREE=>-2001, :T_STRING=>2000}
fast_version
{:FREE=>-2001, :T_STRING=>2000}
Warming up --------------------------------------
      master_version   155.673k i/100ms
        fast_version   106.515k i/100ms
Calculating -------------------------------------
      master_version      2.652M (±20.4%) i/s -     12.610M in   5.036494s
        fast_version      2.237M (±16.8%) i/s -     10.865M in   5.035366s

Comparison:
      master_version:  2651702.2 i/s
        fast_version:  2237470.6 i/s - same-ish: difference falls within error
```

pvalena/rails,prathamesh-sonpatki/rails,Erol/rails,kddeisz/rails,mohitnatoo/rails,flanger001/rails,yasslab/railsguides.jp,tjschuck/rails,tgxworld/rails,travisofthenorth/rails,rafaelfranca/omg-rails,assain/rails,eileencodes/rails,illacceptanything/illacceptanything,palkan/rails,brchristian/rails,EmmaB/rails-1,arunagw/rails,bogdanvlviv/rails,esparta/rails,kmcphillips/rails,kddeisz/rails,fabianoleittes/rails,aditya-kapoor/rails,illacceptanything/illacceptanything,lcreid/rails,schuetzm/rails,rails/rails,esparta/rails,assain/rails,illacceptanything/illacceptanything,MSP-Greg/rails,baerjam/rails,shioyama/rails,fabianoleittes/rails,utilum/rails,travisofthenorth/rails,jeremy/rails,iainbeeston/rails,baerjam/rails,joonyou/rails,illacceptanything/illacceptanything,shioyama/rails,Vasfed/rails,yalab/rails,palkan/rails,rails/rails,Envek/rails,betesh/rails,lcreid/rails,illacceptanything/illacceptanything,MSP-Greg/rails,gfvcastro/rails,brchristian/rails,yawboakye/rails,BlakeWilliams/rails,fabianoleittes/rails,schuetzm/rails,tjschuck/rails,illacceptanything/illacceptanything,illacceptanything/illacceptanything,printercu/rails,notapatch/rails,flanger001/rails,kddeisz/rails,esparta/rails,Stellenticket/rails,gfvcastro/rails,bogdanvlviv/rails,Stellenticket/rails,printercu/rails,notapatch/rails,yalab/rails,eileencodes/rails,flanger001/rails,yahonda/rails,assain/rails,deraru/rails,rafaelfranca/omg-rails,brchristian/rails,repinel/rails,yawboakye/rails,Vasfed/rails,yasslab/railsguides.jp,BlakeWilliams/rails,bogdanvlviv/rails,Erol/rails,odedniv/rails,tjschuck/rails,yhirano55/rails,yhirano55/rails,yawboakye/rails,yhirano55/rails,aditya-kapoor/rails,pvalena/rails,repinel/rails,Edouard-chin/rails,tgxworld/rails,vipulnsward/rails,kddeisz/rails,aditya-kapoor/rails,illacceptanything/illacceptanything,lcreid/rails,georgeclaghorn/rails,notapatch/rails,iainbeeston/rails,starknx/rails,BlakeWilliams/rails,Envek/rails,tgxworld/rails,lcreid/rails,jeremy/rails,schuetzm/rails,Edouard-chin/rails,odedniv/rails,untidy-hair/rails,mechanicles/rails,EmmaB/rails-1,mechanicles/rails,printercu/rails,esparta/rails,illacceptanything/illacceptanything,joonyou/rails,betesh/rails,vipulnsward/rails,tjschuck/rails,vipulnsward/rails,aditya-kapoor/rails,mechanicles/rails,jeremy/rails,odedniv/rails,arunagw/rails,yhirano55/rails,iainbeeston/rails,utilum/rails,starknx/rails,illacceptanything/illacceptanything,yahonda/rails,deraru/rails,eileencodes/rails,gauravtiwari/rails,joonyou/rails,yasslab/railsguides.jp,MSP-Greg/rails,mohitnatoo/rails,travisofthenorth/rails,Edouard-chin/rails,notapatch/rails,schuetzm/rails,betesh/rails,Stellenticket/rails,untidy-hair/rails,flanger001/rails,repinel/rails,deraru/rails,EmmaB/rails-1,travisofthenorth/rails,betesh/rails,untidy-hair/rails,georgeclaghorn/rails,georgeclaghorn/rails,tgxworld/rails,mohitnatoo/rails,gfvcastro/rails,repinel/rails,utilum/rails,rails/rails,deraru/rails,yalab/rails,shioyama/rails,kmcphillips/rails,vipulnsward/rails,printercu/rails,palkan/rails,illacceptanything/illacceptanything,rafaelfranca/omg-rails,pvalena/rails,Vasfed/rails,yawboakye/rails,MSP-Greg/rails,illacceptanything/illacceptanything,yalab/rails,illacceptanything/illacceptanything,Erol/rails,arunagw/rails,bogdanvlviv/rails,kmcphillips/rails,gauravtiwari/rails,baerjam/rails,mohitnatoo/rails,utilum/rails,BlakeWilliams/rails,starknx/rails,baerjam/rails,gfvcastro/rails,Erol/rails,joonyou/rails,assain/rails,Envek/rails,untidy-hair/rails,kmcphillips/rails,yasslab/railsguides.jp,iainbeeston/rails,eileencodes/rails,Stellenticket/rails,jeremy/rails,fabianoleittes/rails,Edouard-chin/rails,gauravtiwari/rails,pvalena/rails,prathamesh-sonpatki/rails,Envek/rails,illacceptanything/illacceptanything,Vasfed/rails,rails/rails,arunagw/rails,shioyama/rails,georgeclaghorn/rails,prathamesh-sonpatki/rails,illacceptanything/illacceptanything,prathamesh-sonpatki/rails,yahonda/rails,palkan/rails,mechanicles/rails,yahonda/rails