Cleaned up onKey*() events implementation and fixed async bug in Jasmine tests

* Reimplemented how the onKey*() events work. Now all of the logic is
in the GeoQuery constructor and the onKey*() events just set the
callbacks.
* Fixed an async bug in Jasmine tests which was caused by the fact that
every time I reset the Firebase, I didn’t clear the previous .on()
event handlers. This exploited a bug in the Checklist class which would
fire the done() callback multiple times, screwing up Jasmine.
* Other minor code cleanup