enforce type checking when mutating ListField

ListField now returns a TypedList that enforces the field's value
conversions when mutating the list. Now you can't .append() an invalid
value.