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.

- [ ] Fix Virtus to cast ActionController::Parameters
- [ ] Stop Virtus casting `{ day: '', month: '', year: '' }` as `Date.today` 
Cleaned up the shared example so we can dispatch with these shenanigans.