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` 
target is promoted to a public method throughout. It was always public in Form anyway and according to LSP should be public too.