Follow up to bbe7fe41 to fix enum leakage across classes.

The original attempt didn't really fix the problem and wasn't testing the
problematic area. This commit corrected those issues in the original commit.

Also removed the private `enum_mapping_for` method. As `defined_enums` is now a
method, this method doesn't provide much value anymore.
Ensure we are looking  with string keys
Only apply DATABASE_URL for Rails.env

As we like ENV vars, also support DATABASE_URL_#{env}, for more obscure
use cases.
Make sure DEFAULT_URL only override current environment database
configuration
Test DATABASE_URL has precendance over DATABASE_URL_#{environment}
Only call DEFAULT_ENV proc one time
Check env_url only once
entry is always a Hash
Rearrange the config merger some more

This seems to simplify the operative part. Most importantly, by
pre-loading all the configs supplied in ENV, we ensure the list is
complete: if the developer specifies an unknown config, the exception
includes a list of valid ones.
Give a deprecation message even when the lookup fails

If the supplied string doesn't contain a colon, it clearly cannot be a
database URL. They must have intended to do a key lookup, so even though
it failed, give the explanatory deprecation warning, and raise the
exception that lists the known configs.

Conveniently, this also simplifies our logical behaviour: if the string
matches a known configuration, or doesn't contain a colon (and is
therefore clearly not a URL), then we output a deprecation warning, and
behave exactly as we would if it were a symbol.
Ensure we correctly and immediately load all ENV entries

.. even when the supplied config made no hint that name was relevant.