Bug: scope.$.merge with keys error
scope.$.merge accepts a single key, and throws an exception on bad arguments
scope.$.merge(deep, object)
merge and snapshot support cycles
Merge: remove unnecessary addition to the seen array when doing deep merge with cycle prevention
Tidy exception and $ internal references
Tests: merge and snapshot, including cycles