Restrict special datetime handling to parts of messages

This is an alternate implementation of #826.
I would prefer if we killed these and wrote ``.to_json`` and ``.from_json`` methods that explicitly encoded / decoded the specific fields that are expected to be datetime objects. Maybe we could even have a tiny ``ScheduledItem`` class for these?