Fix count caches not being invalidated

Should probably fix #92

The problem occurs because of a change after Gingerbread where observers are called in the reverse order they were registered. This fixes it by defining our own observer list and making sure we clear any caches before the other observers are called.