test; more thorough test for #975
fixed; prohibit updating arrays selected with $elemMatch

An $elemMatch projection only returns the elements of the array in the
database that match the argument. While helpful when working with
large arrays, it means we can no longer depend on any array elements
position being accurate - manipulating these arrays with the
mongoose helper methods would potentially result in incorrect array
elements getting updated or even loss of array elements in the database.

Attempting to update an array selected with an $elemMatch projection
now returns an error that includes the array paths in violation.

To update arrays selected with $elemMatch, manually use Model.update,
Model.findByIdAndUpdate, or another method outside of document.save().

closes #1334