Make URL escaping more consistent

1. Escape '%' characters in URLs - only unescaped data
   should be passed to URL helpers

2. Add an `escape_segment` helper to `Router::Utils`
   that escapes '/' characters

3. Use `escape_segment` rather than `escape_fragment`
   in optimized URL generation

4. Use `escape_segment` rather than `escape_path`
   in URL generation

For point 4 there are two exceptions. Firstly, when a route uses wildcard
segments (e.g. *foo) then we use `escape_path` as the value may contain '/'
characters. This means that wildcard routes can't be optimized. Secondly,
if a `:controller` segment is used in the path then this uses `escape_path`
as the controller may be namespaced.

Fixes #14629, #14636 and #14070.
Grammar fix in Getting Started Guide
Merge pull request #14816 from jonatack/patch-2

Grammar fix in Getting Started Guide [ci skip]
Fix code indentation and improve formatting

in the Getting Started Guide.

This PR regroups #14817, #14818 and #14819 into one commit.

[skip ci]
[ci skip] builtin -> built-in
Merge pull request #14821 from jonatack/patch-5

Fix code indentation and improve formatting
Merge pull request #14820 from akshay-vishnoi/doc_changes

[ci skip] builtin -> built-in
replace class_eval by define_method in abstract_controller/callbacks
Document ActionController::TestCase::Behavior::ClassMethods.process

[ci skip]
[ci-skip] correct the classify example's output
Merge pull request #14823 from kuldeepaggarwal/fix-inflector-example

correct the classify example's output.
Merge branch 'master' into adequaterecord

* master: (74 commits)
  [ci skip] builtin -> built-in
  Fix code indentation and improve formatting
  Grammar fix in Getting Started Guide
  Make URL escaping more consistent
  Optimize URI escaping
  Always escape string passed to url helper.
  Remove statement assuming coffee shop/public space wifi is inherently insecure
  Don't rely on Arel master in bug report template [ci skip]
  wrap methods in backticks [ci skip]
  "subhash" --> "sub-hash"
  multibyte_conformance.rb --> multibyte_conformance_test.rb
  Fix inconsistent behavior from String#first/#last
  `@destroyed` should always be set to `false` when an object is duped.
  remove warning `warning: ambiguous first argument; put parentheses or even spaces`
  :uglify -> :uglifier
  Regression test for irregular inflection on has_many
  Singularize association names before camelization
  Fix spelling and proper nouns
  Optimize select_value, select_values, select_rows and dry up checking whether to exec with cache for Postgresql adapter
  Include default rails protect_from_forgery with: :exception
  ...

Conflicts:
	activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
	activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
Changed miss-leading comment [ci skip]

After this 21dbe6f39b57f52967e92716dbd5e2b894e7a64c

2.1.1 :001 > 'business'.classify
 => "Business"

2.1.1 :004 > 'calculus'.classify
 => "Calculu"
2.1.1 :005 >
ActionController::Renderers documentation fix

ActionController::Renderers::RENDERERS is an instance of Set. Docs incorrectly
state that it's a Hash.
Merge pull request #14825 from arunagw/aa-remove-missleading-comment

Removed missleading comment [ci skip]
Merge pull request #14826 from stevegraham/action_controller_renderer_doc_fix

ActionController::Renderers documentation fix
Change favicon_link_tag helper mimetype from image/vnd.microsoft.icon to image/x-icon.

Although the official IANA-registered MIME type for ICO files is image/vnd.microsoft.icon,
registered in 2003, it was submitted to IANA by a third party and is not recognized by Microsoft products.
The MIME type image/x-icon should be used since is the one recognized by the major browsers on the market.
Running AR tests on postgres, mysql & sqlite

[ci skip]
Revert "update doc, assert_template also accepts false"

This reverts commit 9b1c077c91f09b64b8105f31fdf5240cd12c2e16.

my bad.
`assert_template` only accepts a String, Symbol, Hash, Regexp or nil.

`false`(layout: false) is provided as a Hash.
Revert "Revert "update doc, assert_template also accepts false""

Reason: docrails policy is very strict about code. No matter how
innocent the change, if it is not documentation it needs to go
through a PR to rails/rails.

Plase see the warning box at the bottom of

    http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#contributing-to-the-rails-documentation

This reverts commit e1c5d24369440857de1402d61c85d982b29d8019.