[loader/yaml] Accept a list config dirs

When people are using yaml based configuration, they may want to
separate out default config files and mutable files that might not be
tracked. The easiest way to handle this is to have multiple config
directories, one of which is tracked in version control and the other
one is untracked.

This commit allows Loader::YAML#yamldir to accept a string or array of
strings to make this possible.

Thanks to Charlie Sharpsteen for basically writing this.
[model/base] Add `with_attr` method

A lot of attributes were being conditionally assigned if the attribute
was defined, which introduced a lot of duplication. This commit adds a
helper to simplify conditional assignment.
Merge branch 'yaml-loader-multiple-directories'
Merge branch 'refactor-conditional-settings'