Big commit, re-worked most of the logic.
This is a big commit, with a huge change in the code. A number of things
came about in this commit.
1. Support for multi-OS defaults.
2. Defaults for Redhat and Ubuntu systems.
3. Support for arrays or strings as params.
4. Completely move and re-write the logic that picks default vs user
data.

Item 4 was the biggest of the changes. However, This was done to get
something... anything working. The previous commit had working defaults
nicely, but that was it, you could not actually modify. I moved the
picking logic into the nsswitch class proper due to the way manner in
which variables move around inherited classes.

Small, sane, incremental commits from here on out, I swear!