refactor: Refactor metadata and datasources to be more testable

The bulk of this PR is in https://github.com/crawford/coreos-cloudinit/commit/a923161f4acfd4091994ff0b4765e7fe6647ab60.
Just to be totally explicit - if `cfg.NetworkConfig` is unset but `NetconfType` is, and we reach here, do we want to error in some way? or just have this go through silently?