Refactoring

- Remove keymaps and replacements from dsn classes
This functionality doesn'st belong in the dsn classes themselves, rather
application-specific wrappers

- implement getters and setters
This will make it easier to manage differences between dsn classes

- prevent nulls showing up in parsed arrays
They are just noise, so strip them out
use getters when parsing a url