Implement contact updating.

We should throw an exception instead of silently discarding unexpected fields.