Add ActiveRecord::Tasks::DatabaseTasks.migrate

This extracts the logic that was embedded in a Rake task into a static
method.
Bonus: the first test for `rake db:migrate`
Clarify how the ConnectionHandler works

This makes the implicit description of how connection pooling works a
little more explicit. It converts the examples of a model hierarchy into
actual Ruby code and demonstrates how the key structure of the
database.yml relates to the `establish_connection` method.
Merge pull request #16361 from JackDanger/clearer-connection-pool-documentation

[doc] Clarify how the ConnectionHandler works
Merge pull request #16350 from JackDanger/test-rake-db-migrate-task

Add ActiveRecord::Tasks::DatabaseTasks.migrate
do a hash lookup for collision detection

hash lookup should be faster than searching an array.
invert check so we fail faster

there's no reason to to_sym the string if it doesn't match the regexp
anyway
Remove being/number methods from transaction class
Remove parent on Transaction object
Make ClosedTransaction a null object
Merge pull request #16341 from arthurnn/transactions_remove_begin

Transactions refactoring - 2
Move TransactionManager to bottom of class
Replace ClosedTransaction with NullTransaction
Merge pull request #16363 from arthurnn/null_transaction

Null transaction
use `get` instead of accessing the named routes internals
Rename method for clarity

Ruby generally does not use the is_* prefix on predicate methods.
Use available method rather than macro name checking
Fixes small error in ActiveRecord::Reflection docs

[ci skip]
Update README.md
Added Object#self which returns the object itself
Rename Object#self to Object#itself to have parity with matz sanctioned method name for Ruby 2.2