When a field holds an array of strings, like ApiKeys.roles, the current logic works for listing those strings (I think it just does array.toString(), which gives a comma separated list), but not for adding or editing the field. In both cases, the value is sent to the server as a single string, not an array.
I think we should have a custom field type for this, with behavior like this library. We might be able to extend chosen, which we're already using, to support this, by just adding dynamically (i.e. on keydown) an option to the choice list that's the same as the value that the user's currently typing