Deprecate `*_path` methods in mailers

Email does not support relative links since there is no implicit host. Therefore all links inside of emails must be fully qualified URLs. All path helpers are now deprecated. When removed, the error will give early indication to developers to use `*_url` methods instead.

Currently if a developer uses a `*_path` helper, their tests and `mail_view` will not catch the mistake. The only way to see the error is by sending emails in production. Preventing sending out emails with non-working path's is the desired end goal of this PR.

Currently path helpers are mixed-in to controllers (the ActionMailer::Base acts as a controller). All `*_url` and `*_path` helpers are made available through the same module. This PR separates this behavior into two modules so we can extend the `*_path` methods to add a Deprecation to them. Once deprecated we can use this same area to raise a NoMethodError and add an informative message directing the developer to use `*_url` instead.

The module with warnings is only mixed in when a controller returns false from the newly added `supports_relative_path?`.

Paired @sgrif & @schneems
Prevent using String#scrub on Rubinius

Rubinius' has built-in support for String#scrub but it doesn't have yet
support for ASCII-incompatible chars so for now, we should rely on the
old implementation of #tidy_bytes.
Merge pull request #16345 from robin850/rbx-tidy-bytes

Prevent using String#scrub on Rubinius
Remove redundant `self.` in class method calls

These are the only instances of this in the whole code base.
Merge pull request #16346 from JackDanger/remove_redundant_self_in_class_method_calls

Remove redundant `self.` in class method calls
Merge pull request #15840 from schneems/schneems/deprecate-mailer_path_methods

Deprecate `*_path` methods in mailers
`add` will remove the method if it exists already
split path_helpers and url_helpers

this lets us avoid hard coding a regexp for separating path and url
helpers in the clear! method.
fix variable name
avoid instrospection on the module

we already know what helpers are path helpers, so just iterate through
that list and define the helpers with warnings
remove alias_method_chain

we can `super` in to the previous implementation.
don't access named routes internals

just ask whether or not the route is defined
Redefine macro checks for reflections

Now that we define the macro on the reflection type we no longer
need to check `macro == :what` on each type for `belongs_to?` or
`has_one?` etc. These now default to false unless it's defined
in the reflection class.

Reuse existing belongs_to? method to check macros

We don't need to do `:belongs_to == macro` anymore becasue we
have a `belongs_to?` method. I didn't find this being used
anywhere for `has_one?` or `collection?` since they were already
fixed.
Removed unnecessary call to 'convert_key' in 'HashWithIndifferentAccess#to_hash'

All the keys are already Strings by virtue of being a HashWithIndifferentAccess.
turn scope in to a linked list

this makes scope rollback much easier
push options inside the scope object
remove useless deup

every call to default_resources_path_names allocates a new hash, no need
to dup
Remove some globals from configuration tests
Fix / improve some assertions
Remove some more globals from tests

We are using blocks here so we have access to the environment around
them, no need for globals.