refactor: Refactor metadata and datasources to be more testable

The bulk of this PR is in https://github.com/crawford/coreos-cloudinit/commit/a923161f4acfd4091994ff0b4765e7fe6647ab60.
It should go though. I'm leaving it up to the network processors to handle that case (right now, they just emit nothing).