refactor: Refactor metadata and datasources to be more testable

The bulk of this PR is in https://github.com/crawford/coreos-cloudinit/commit/a923161f4acfd4091994ff0b4765e7fe6647ab60.
For now it is. I have another PR lined up that takes advantage of this.