FieldEditor : add `isEnabled` , `render()` and `onRenderValue()`

- isEnabled : this accessor provides a way for users to temporarily
disable an editor from the outside
- render() : this gets the latest value and then calls the abstract
`onRenderValue` which editor subtypes must implement; all of the default
editors already had this logic so this change centralizes and
standardizes the code.
- onRenderValue() : this is the abstract method that each concrete
editor must implement to refresh on value changes.