Simplify usage of parseDsn

parseDsn can now be used mostly out of the box by all classes using the StaticConfigTrait - with the exception of ConnectionManager, as noted below. Unless they are otherwise specified, the `scheme` of the DSN is set as both the `className` and `driver`. As such, the preferred method for usage in your application would be:

    Fully\Namespaced\ClassName://username:password@host:port/path?query=string&args=here&driver=Some\Other\Class\Name

This commit drops support for `scheme+Namespaced\ClassName\As\Driver`, simplifying the underlying logic a bit.

For the ConnectionManager class, Drivers still need to transform the path into a database_name, and as such we cannot use the trait method as is.
If the value of `dsn` fails to be parsed, return the original config as is.

Malformed DSNs may result in false being returned from `parse_url`, breaking further logic. As we do merges of the original config and the parsed DSN arrays, the logic is short-circuited to provide a similar pathway.