Switch to using a timer

This removes the recursive call that was being triggered by nested
setTimeout calls.  Each call that had bokeh *not* loaded ended up adding
another function to the call stack before setup actually created a
SpectrogramApp instance.

@bryevdv the pattern this replaces is something we should try to avoid
as its not hard to blow the stack up by accident.
Cache call to _.keys() and use === operator
Switch to an interval based approach instead of recursion

This is *slightly* slower because it relies on the event loop to queue
up the next job instead of executing immediately.  That said, it still
does ~8 updates a second (instead of ~10 when done recursively).
Merge pull request #1321 from tswicegood/feature/spectrogram-enhancements

Small tweaks to the CoffeeScript