Add `Daemon::Configuration`

This adds the configuration class for daemons which is used to
store config values when defining a `Daemon`. When the `Daemon`
is initialized, the `Configuration` will be validated and then
a `DaemonData` will be built from it, which is used for "reading"
the config values. The `Configuration` provides a nice way to
write values through a DSL on the `Daemon`, and the `DaemonData`
is used for reading those values efficiently. When the
`Configuration` is initialized, the init procs configured for a
`Daemon` are run and it ensures it has enough information for a
`Daemon` to be run.