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.
Eager load the attributes from the underlying model.