SetConfigKey and other structured keys accept empty values now (previously ignored them), and don't flatten collections passed to them; also tidied the class hierarchy to remove redundancy, better testing; FlagUtils can return more information about flags and config keys (enabling us to set flags and config better from yaml to EntitySpec), and other minor tidies and improvements to consistency
flags now accepted in yaml, with declared flags and config keys (from the type) permitted at the top level;
and the yaml tests (nice addition @nakomis, @aledsage) simplified in terms of lines added