Revise 'sqlite3:' URL handling for smoother upgrades

Restore the 4.0 behaviour for 'sqlite3:///', but deprecate it. We'll
change to the absolute-path interpretation in 4.2.

The current "correct" spellings for in-memory, relative, and absolute
URLs, respectively, are:

    sqlite3::memory:
    sqlite3:relative/path
    sqlite3:/full/path

Substantially reverses/defers fbb79b517f3127ba620fedd01849f9628b78d6ce.
Uncovered by @guilleiguaran while investigating #14495, though that
sounds like a different issue.
Complete change of `sqlite3:///` path handling

That which was now relative is now absolute.
Avoid a spurious deprecation warning for database URLs

This is all about the case where we have a `DATABASE_URL`, and we have a
`database.yml` present, but the latter doesn't contain the key we're
looking for.

If the key is a symbol, we'll always connect to `DATABASE_URL`, per the
new behaviour in 283a2edec2f8ccdf90fb58025608f02a63948fa0.

If the key is a string, on the other hand, it should always be a URL:
the ability to specify a name not present in `database.yml` is new in
this version of Rails, and that ability does not stretch to the
deprecated use of a string in place of a symbol.

Uncovered by @guilleiguaran while investigating #14495 -- this actually
may be related to the original report, but we don't have enough info to
confirm.
Avoid including DB details in exception messages

The keys are quite sufficient; we shouldn't be throwing passwords
around.
Add ConnectionHelper to refactor tests.
Treat blank UUID values as nil
Merge branch 'lavrovdv-patch-1'
Merge pull request #14561 from tgxworld/refactor_run_without_connection

Add ConnectionHelper to refactor tests.
Merge pull request #14570 from matthewd/uri_deprecation_warning

Avoid a spurious deprecation warning for database URLs
Fix error when using `with_options` with lambda.

It was causing error when using `with_options` passing a lambda as its
last argument.

    class User < ActiveRecord::Base
      with_options dependent: :destroy do |assoc|
        assoc.has_many :profiles, -> { where(active: true) }
      end
    end

It was happening because the `option_merger` was taking the last
argument and checking if it was a Hash. This breaks the HasMany usage,
because its last argument can be a Hash or a Proc.

As the behavior described in this test:
https://github.com/rails/rails/blob/master/activesupport/test/option_merger_test.rb#L69
the method will only accept the lambda, this way it will keep the expected behavior. See 9eaa0a34
Merge pull request #14569 from matthewd/sqlite_relative_deprecated

Revise 'sqlite3:' URL handling for smoother upgrades

Conflicts:
	activerecord/CHANGELOG.md
Explicitly load Kernel#y when starting a console

Previously, we relied on the IRB-detection in Psych itself. But that
doesn't work when we're running under spring: the application boots (and
thus psych is required) before we switch to console mode and load IRB.

Fixes #14587.
Merge pull request #14588 from matthewd/kernel_y_with_spring

Explicitly load Kernel#y when starting a console
Improve error message for guides:generate:kindle

With `kindlegen` missing from the PATH, the task
keeps suggesting to `gem install kindlerb`.
This change provides a more meaningful error
message for guides:generate:kindle.
Merge pull request #14590 from czak/improved_kindlerb_error_message

Improve error message for guides:generate:kindle
Merge pull request #14572 from laurocaetano/with_options_and_scope

Fix error when using `with_options` with lambda.

Conflicts:
	activerecord/CHANGELOG.md
Block a few default Class methods as scope name.

Add tests to make sure scopes cannot be create with names such as:
private, protected, public.
Make sure enum values don't collide with those methods too.
Merge pull request #14582 from arthurnn/blacklist_ruby_methods

Blacklist ruby keywords for scopes