fix($animate): ensure that class-based animations only consider the most recent DOM operations

Prior to this fix $animate would maintain a count of each time a class was
added and removed within $animate. With this fix, $animate instead only cares
about the most recent class times that the classes were added and/or removed
and it will only remember a total of one addClass or removeClass operation per
className.

```
// before
addClass    => 1
removeClass => 0
addClass    => 1
addClass    => 2
addClass    => 3
removeClass => 2
removeClass => 1
// since 1 > 0 then this will cause an addClass animation

// now
addClass    => 1
removeClass => 0
addClass    => 1
addClass    => 1
addClass    => 1
removeClass => 0
removeClass => -1
// since 1 < 0 then this will cause an removeClass animation
```

Closes #8946
and for that matter, why are we doing this `push('+' + class)` / `push('-' + class)` thing? arrays might be slightly better (perf-wise) than doing this with objects (at least in V8), but for multiple operations on a single class, I think we actually do better with the object instead. In any case, the object path is simpler, and since there's probably no good reason to do the array thing, it just strikes me as a much better option.