Add choices to custom data fields

Waiting on QA
@twymer
It's not something I feel strongly about.  This version of `CustomDataField` is just more complex, as it handles the choices list, so it felt like it deserved an explicit initialization step.  I also wanted the two models to have more of the same structure.