forms: Standardize saving of choice field values

Always save a key/value hash of the selected value(s). However, if the field
does not have the multivalue configuration setting, then retrieve just the
key with the to_php() function. to_database(), however, will always return a
JSON string with the value(s) formatted as a hash array.
forms: Fixup the SelectionField wrt. multiple values

Always support and consider multiple values — even using the typeahead
widget.
forms: Disconnect toString() and getChoice() functionality
forms: Fix loading indication on dialog
forms: Selection of a choice field is not always required
forms: Add media to widgets

This will allow for more complex widgets to be added as plugins which
include css and javascript media files without manually adding header or
footer lines.
forms: Add file upload field type
forms: Use new file upload field for staff response
files: Orphaned files hang around for 24 hours
forms: Use file upload widget for canned response attachments and notes
upload: Reduce file processing client-side
upload: Fix several validation processing errors
forms: Use new file upload widget for canned response designer
forms: Deduplicate canned attachments
forms: Add download links for canned attachments
forms: Use new upload widget for FAQ articles
forms: Use new upload field on the client portal
forms: Add attachment configuration to the thread entry
forms: Use the new upload widget for staff response on ticket open
Remove unnecessary multifile code