refactor(*): rework cloudconfig for better extensibility and consistency

This change creates a few simple interfaces for coreos-specific configuration
options and moves things to them wherever possible; so if an option needs to
write a file, or create a unit, it is acted on exactly the same way as every
other file/unit that needs to be written during the cloud configuration
process.