fix(coreos-cloudinit): Ensure /etc/coreos exists before writing to it
Merge pull request #107 from bcwaldon/locksmith-no-etc

fix(coreos-cloudinit): Ensure /etc/coreos exists before writing to it
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.
refactor(systemd): don't allow users to set DropIn=true yet
Merge pull request #100 from jonboulle/rework

refactor(*): rework cloudconfig for better extensibility and consistency
refactor(init): rename locksmith to update
Merge pull request #106 from jonboulle/locksmith_to_update

refactor(init): rename locksmith to update
feat(fleet): add basic fleet configuration to cloud-config
Merge pull request #101 from jonboulle/fleet

feat(*): add basic fleet configuration to cloud-config
feat(update): add more configuration options for update.conf
Merge pull request #103 from jonboulle/20

feat(*): add more configuration options for update.conf
Use exponential backoff when fetching user-data from an URL.

The user-cloudinit-proc-cmdline systemd unit is responsible for
fetching user-data from various sources during the cloud-init
process. When fetching user-data from an URL datasource we face
a race condition since the network may not be available, which
can cause the job to fail and no further attempts to fetch the
user-data are made.

Eliminate the race condition when fetching user-data from an URL
datasource. Retry the fetch using an exponential backoff until
the user-data is retrieved.

Fixes issue 105.
Adds sleep cap to exponential backoff so it does not go too high
Merge pull request #113 from c4milo/exponential_backoff

Exponential backoff with sleep capping
feat(*): warn on encountering unrecognized keys in cloud-config
fix(initialize): also check for unknown coreos keys
fix(*): catch more unknown keys in user and file sections