refactor

This is heading in the direction that I see for the 0.6 release. It puts us in a better place for future work. It is a massive amount of work to refactor client libraries, so this will not merge for at least a few days to allow users a chance to evaluate it.