Record both setter.snapshot and entry.snapshots[name].
Record both setter.snapshot and entry.snapshots[name].

To make things a bit clearer, I renamed entry._lastValues to
entry.snapshots and setter.last to setter.snapshot, and I factored out the
snapshotting logic into a helper function called updateSnapshot, which
replaces the changed function from before.

Recording entry._lastValues[name] was a good idea (in addition to
recording setter.last for each setter function), because it allows us to
determine if the value has changed before looking at any of the setter
functions. However, I think we still need to record setter.snapshot, in
order to be sure we pass any new results to every applicable setter.

If the value has changed, then we need to pass it to every setter function
and update each setter.snapshot property to the current snapshot.

If the value has not changed, we still have to loop through the setter
functions to make sure they've all received an initial value, which
requires recording/checking setter.snapshot for each setter function.

We could potentially skip this work if we know no new setter functions
have been added since we last broadcast a value, but (unless this becomes
a performance problem) I prefer the safety of storing setter.snapshot on
each setter function.

Either way, the new snapshot becomes the setter.snapshot object for every
setter registered for the given name, which is much more efficient than
recomputing a separate setter.last snapshot for each setter, as we were
doing before PR #246.

benjamn/reify,benjamn/reify