Users can be expected to enter a label and may for instance supply:
...which makes a very bad identifier. We need an identifier that can be
used as both a key in our dict() and as a field-name in our input forms.
Also, we should prevent custom fields from colliding with non-custom
fields. To that end, munge labels into names by prefixing with _ and
replacing any non-alphanumeric separating run with _. E.g., the example
above becomes
While we're at it, we'll title-case the label so it matches the display
of standard fields. The perfect place calculate both these values is in
Python where we are accepting the json that describes the custom fields:
TrackerAdminControler.set_custom_fields. Both are easier in Python than
in JavaScript (sorry, JavaScript).