set the configured #inheritance_column on #become (#7503)

I had to create a new table because I needed an STI table,
which does not have both a "type" and a "custom_type"

the test fails with:
  1) Error:
test_alt_becomes_works_with_sti(InheritanceTest):
NoMethodError: undefined method `type=' for #<Cabbage id: 1, name: "my cucumber", custom_type: "Cucumber">
    /Users/username/Projects/rails/activemodel/lib/active_model/attribute_methods.rb:432:in `method_missing'
    /Users/username/Projects/rails/activerecord/lib/active_record/attribute_methods.rb:100:in `method_missing'
    /Users/username/Projects/rails/activerecord/lib/active_record/persistence.rb:165:in `becomes'
    test/cases/inheritance_test.rb:134:in `test_becomes_works_with_sti'
    test/cases/inheritance_test.rb:140:in `test_alt_becomes_works_with_sti'
Merge pull request #7506 from senny/issue_7503

#becomes works with configured inheritance_column
Allow routing concerns to accept a callable

This allows us to make alterations to the generated routes based on the
scope of the current mapper, and otherwise allows us to move larger
blocks of concerns out of the routes file, altogether.
Fix concerns not executing block in mapper

Also, add documentation for alternate usage.
Make enhanced routing Concerns more tell-don't-ask
rewrite inheritance tests with a custom inheritance_column

previously the tests with and without a custom `inheritance_column`
used the same models. Since the model then has both fields this can lead
to false positives.
test cleanup, remove ruby_type because it's no longer needed

All tests with a custom inheritance_column use the `Vegtable` model.
The field ruby_type on the Company models is no longer needed
Merge pull request #7515 from senny/custom_inheritance_column_test_refactoring

custom inheritance_column test refactoring
revised the exception message "Expected #{file_path} to define #{qualified_name}"

Users need to know the ultimate problem here is that AS was
trying to autoload a constant and it failed.
Merge pull request #7422 from ernie/improvements-to-improved-routing

Allow routing concerns to accept a callable
We dont need to include the name and the format in the digest -- source is authoritative enough
Refactor `Mime::Type`

`parse` method performance improvements - ~27-33%:

    accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword,  , pronto/1.00.00, sslvpn/1.00.00.00, */*"

    Benchmark.measure{ 1_000_0.times { Mime::Type.parse(accept) }}

    old: 1.430000   0.000000   1.430000 (  1.440977)
    new: 0.920000   0.000000   0.920000 (  0.921813)
Merge pull request #7522 from lexmag/mime_type

Refactor `Mime::Type`
Extend HashWithIndifferentAccess#update to take an optional block

When a block is passed into the method, it will be invoked for each
duplicated key, with the key in question and the two values as
arguments. The value for the duplicated key in the receiver will
be set to the return value of the block.

This behaviour matches Ruby's long-standing implementation of
Hash#update and is intended to provide a more consistent interface.

HashWithIndifferentAccess#merge is also affected by the change, as it
uses #update internally.
Merge pull request #7519 from leocassarani/merge-with-block

Add an optional block to HashWithIndifferentAccess#update and #merge