Replace custom form implementation with Virtus (WIP)

After thinking about #333 it's clear we're beginning to outgrow the current Form implementation. This is a first cut at using Virtus to explicitly type our attributes and avoid something like #333 again.
No sense conforming to the ActiveModel interface as we don't use it once.