Add 'required' and 'default' config settings
Our Boulder configs have some fields that are required, and some that have defaults. We should encode these things in our config structs in a systematic way, using struct tags.
So for instance we might say:
type FooConfig struct {
Color string `config:"required"`
Size int `config:"default:10"`
}
We can then have a helper function that (a) loads JSON into a config struct, and (b) recursively reflects over the contents of the struct, checking that all required fields have a non-zero value and setting all default fields to their default value, if the struct contains a zero value for that field (which would typically be caused by the field being absent in the JSON).
We should make sure this helper function collects all errors for required fields and reports them together, rather than reporting the first one it finds.