Add some more attributes to the Need factory
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
Don't create a need if author details aren't provided

If author details aren't provided with the request,
don't save the need, instead returning a HTTP 422
status and a JSON hash containing an appropriate
error message.

This also restricts the accepted author information
keys to name, email and uid. Only one of these is
required in order to save a need, but as much detail
as desired can be provided by the API client.