Overhaul to viper.

Many things are probably broken. But it's passing the small set of tests I gave
it.

One of the gotchas with the old test suite is that test execution was highly
coupled. That should be fixed now with a combination of convey and an isolated
config object.

See the previous commit which discusses some of the design changes made when
sources were broken out into separate objects instead of being
map[string]interface{}.