Making watchCollection call the listener before clobbering oldValue

I took the naive approach suggested in #2621 of separating out the
changeDetected logic from the rest of the watch to give the listener
time to execute before oldCollection is overwritten.  The logic should
be identical to what's in the main repo, except no changes are made to
the closed-over state until after listener is called back.
Unfortunately, this doesn't appear to work, as the watchCollection
tests are now all failing.

I need to learn more about Karma so I can better debug this, and take
more time to grok the logic of the function before I'd have a shot at
fixing it.