Fixes incorrect calls to ESPError
(cherry picked from commit 6c52624c3bfbef0b5bcd34d308f230b2f24046c6)
Allows admins to see all custom forms
(cherry picked from commit 2b6b31e49e28bea7b0f787be269b35bc422a9206)
Fixes customform bug with option-less fields
(cherry picked from commit 773bc1d82f6780e1fcb8dd7fa5cdf9e1f6a16e6d)
Fixes customform bug for fields with 2+ attributes

In the Python function FormHandler._getFormMetadata(), a ValuesQuerySet
of Field objects is iterated through to construct a JSON object that is
eventually used by the custom form builder. In this ValuesQuerySet,
there might be multiple objects per Field, because of the reverse
relationship to Attribute that is included in the .values() query. The
Python function deals with this by compiling the different
attribute__attr_type and attribute__value values into a single
attributes dictionary. However, the attribute__attr_type and
attribute__value values from the _last_ object for a particular field
are left behind in the returned JSON object, and in some instances in
the form builder JavaScript code, it was these values, rather than the
full attributes object, that were being referenced. This was causing
form copying to fail in the form builder. This change fixes this,
by iterating through the attributes object rather than
attribute__attr_type and attribute__value.
(cherry picked from commit 4b2510791052f106264b02b99a7042fd298336ac)