Allow components to set stateful field values from JSON

This makes it so that StatefulField's register a 'setter' on their
parent Component which maps to the field's string name. When
setField() is called on the component it looks up a setter for
the corresponding field name and calls that setter, hence defering
the actual value setting to the StatefulField.