Feature/conference refactor

**Work in progress; not ready for merge**

# Purpose
The conference submission service is largely untested. It's also currently hard to test, since it's mostly made up of a few large functions with many responsibilities. This patch refactors the existing code into smaller, most testable units, and tests those units.

# Changes
* Refactor conference submission logic into helper classes / functions
* Test refactored code

# Side effects
None expected
Just curious: why is `to_dict()` necessary if `request.form` is dict-like?