Overhaul to viper.

Experimenting with object-orientation for viper.

The hope here is to simplify future development by having a consistent API
for property access among different sources, while providing a suite of utilities
to manage things like deep, case-insensitive access on properties.

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.