Save a snapshot of each need on create or update

When a need is created or updated, save a snapshot
of the need in a NeedRevision document. If the
`save_as` method is used, basic user information
can also be provided.
Don't use destructive methods on the snapshot value
Record details about the author when a need changes