Fix reviewitem contexts

ApproveRejectReviewItem was leaking contexts if the item was not found. The context.commit() and complete() calls were only happening on successfully approving/rejecting an item.

So when the item was not found (e.g. manuscript number doesn't exist in our system), the context would not be completed.

This PR moves the complete() calls to the same methods that create the contexts, and ensures they are always closed out.

There are a couple more defensive changes too in the metadata sync handler