Implements $unset in update.

@corydobson @parkr

More features in the update operation. This also required some changes in `wrapElementForAccess` as deleting invalid paths in with `$unset` (e.g. trying to delete a child of an field that is a string) should not raise errors.