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.
Merge pull request #16352 from gchan/remove-unnecessary-convert-key

Removed unnecessary call to 'convert_key' in 'HashWithIndifferentAccess#to_hash'
Invert unless..else conditions on JRuby checks
Simplify plugin tests a bit, leave the regexp work for minitest
Simplify path setup
Use default argument when testing generators without the need for extra args
Avoid defining the test if it does not need to when not on JRuby
Properly assert for the expected messages

The message passed to Minitest's assert_raise is used as output in case
the assertion fails, but we can test against the exact message by using
the actual exception object that is returned from the assert_raise call.
Raise a descriptive error if non-positive integer passed to in_groups_of.

This is more consistent than the current behaviour of raising a
`ZeroDivisionError: divided by 0` error when 0 is given, which can be
non-obvious especially if `in_groups_of` is part of a longer chain of
methods.

The negative case was ok - "ArgumentError: invalid slice size" - but
this error is clearer still.
Merge pull request #16355 from xaviershay/validate-in-groups-of-args

Raise a descriptive error if non-positive integer passed to in_groups_of
Add tests to ensure default proc is used when `HashWithIndifferentAccess' is initialized with a block
Merge pull request #16356 from gchan/add-hwia-tests

Add tests to ensure default proc is used when `HashWithIndifferentAccess' is initialized with a block
Remove unnecessary call to #tap

This is not storying the RouteSet instance anywhere as the other
examples in the file, so no need to use #tap.