[config] replace DEFAULT_CONFIG with specification
[config] replace DEFAULT_CONFIG with specification

Introduces a master configuration structure defining the configuration and
its keys. The default configuration gets generated dynamically from this
specification.

Update all relevant functions to use this new specification and the easier
input validation. Add more validation in places.

BrowncoatShadow/basin.sh