Add a decorator to calculate changes between snapshots

This decorator can be used on any class which
responds to the `snapshot` method, and will work
out the changes between the snapshot in the decorated
object and the snapshot in a previous revision.

A lot of this code is borrowed from the DiffEnabledAction
class in Panopticon which has a similar purpose.