Use embed parameter on collections and search endpoints

Switch to using the 'embedDocuments' method, which in turn calls
'populateMemberships' but respects the ?embed parameter.
Initial working version of person merger

Allows merging one person into another person. If there is an
unresolvable conflict then this will return an error, otherwise it will
copy the values over.

Currently this just handles basic fields, still need to add support for
arrays of values.
Handle merging arrays together
Ignore hidden paths when merging records

This means ignoring the _id, _internal, __v and other such fields as
they are internal to the individual record and don't need to be copied
across.
Add REST interface for merging people

This allows you to merge two people together via the API, the original
person is updated with the properties of the record to be merged in,
then the record that was merged in is deleted.
Ensure a person can't be merged into themselves

Return a 400 error with an appropriate message if a user tries to merge
a person into the same person.
Return an error when conflicts can't be resolved

If the two documents have differing fields which can't be resolved then
return a 400 error informing the user that they need to take further
action before the records can be merged.
Ensure fields that aren't in the schema get merged

Rather than using 'schema.eachPath', which only iterates over fields in
the schema, we simply key the keys of the model being merged in and
iterate over those instead.
Add test for other collection merging errors

It shouldn't be possible for other collections to be merged, make sure
an error is produced in this situation.
Ignore the 'id' field when merging documents
Handle merging arbitrary arrays of things

Don't assume that arrays will always contain mongoose objects, instead
test for toObject method and if it's not there just compare the two
objects normally.