[DNM] Split form fields into canonical and index types

Require callers to be explicit about whether they'd like to coerce form input with the `from_index` or `from_canonical` methods. (`CanonicalEnumField` exactly replicates the current `EnumField` functionality, but drops support for old-style dict-based enums.)