Enable exact birthdates

Adds support for collecting the exact birthdate from attendees. Fixes #586.

The database on live/staging servers will need the "birthdate" column added to the Attendees table and the AgeGroups table added before this code can be used on them.
This block should really go in ``presave_adjustments`` for two reasons:

1. As a general rule, performing a validation (which is what this function is doing) probably shouldn't have the side effect of modifying the object being validated.  That will technically work, but it's not expected and not very idiomatic.  We're already making these kinds of modifications in ``presave_adjustments`` anyway, so it'll fit better there.

2. The objects being passed here may (or may not, depending on the caller) already be attached to a session.  Opening a new session and then linking objects from two different sessions can be dangerous; you can do it if you know what you're doing, of course, but it's safer to avoid doing that.  This isn't an issue in ``presave_adjustments`` which is called while a session-attached object is being flushed.